Collections.emptyList () devuelve una Lista <Object>?

Tengo problemas para navegar la regla de Java para inferir parámetros de tipo genérico. Considere la siguiente clase, que tiene un parámetro de lista opcional:

import java.util.Collections;
import java.util.List;

public class Person {
  private String name;
  private List<String> nicknames;

  public Person(String name) {
    this(name,Collections.emptyList());
  }

  public Person(String name,List<String> nicknames) {
    this.name = name;
    this.nicknames = nicknames;
  }
}

Mi compilador de Java da el siguiente error:

Person.java:9: The constructor Person(String, List<Object>) is undefined

PeroCollections.emptyList() tipo de devoluciones<T> List<T>noList<Object>. Agregar un yeso no ayuda

public Person(String name) {
  this(name,(List<String>)Collections.emptyList());
}

rendimientos

Person.java:9: inconvertible types

UtilizandoEMPTY_LIST en lugar deemptyList()

public Person(String name) {
  this(name,Collections.EMPTY_LIST);
}

rendimientos

Person.java:9: warning: [unchecked] unchecked conversion

Mientras que el siguiente cambio hace que el error desaparezca:

public Person(String name) {
  this.name = name;
  this.nicknames = Collections.emptyList();
}

¿Alguien puede explicar con qué regla de verificación de tipo me estoy enfrentando aquí y la mejor manera de evitarlo? En este ejemplo, el ejemplo de código final es satisfactorio, pero con clases más grandes, me gustaría poder escribir métodos siguiendo este patrón de "parámetro opcional" sin duplicar el código.

Para crédito extra: cuándo es apropiado usarEMPTY_LIST Opuesto aemptyList()?

Respuestas a la pregunta(3)

Su respuesta a la pregunta