Collections.emptyList () retorna uma Lista <Object>?

Estou tendo problemas para navegar na regra do Java para inferir parâmetros de tipo genérico. Considere a seguinte classe, que possui um 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;
  }
}

Meu compilador Java fornece o seguinte erro:

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

MasCollections.emptyList() retorna tipo<T> List<T>, nãoList<Object>. Adicionar um elenco não ajuda

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

rendimentos

Person.java:9: inconvertible types

UsandoEMPTY_LIST ao invés deemptyList()

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

rendimentos

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

Considerando que a seguinte alteração faz com que o erro desapareça:

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

Alguém pode explicar qual regra de verificação de tipo estou enfrentando aqui e a melhor maneira de contornar isso? Neste exemplo, o exemplo de código final é satisfatório, mas com classes maiores, eu gostaria de poder escrever métodos seguindo esse padrão de "parâmetro opcional" sem duplicar o código.

Para crédito extra: quando é apropriado usarEMPTY_LIST em oposição aemptyList()?

questionAnswers(3)

yourAnswerToTheQuestion