Collections.emptyList () возвращает список <Object>?

У меня возникли некоторые проблемы при навигации по правилу Java для определения параметров универсального типа. Рассмотрим следующий класс, который имеет необязательный параметр списка:

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;
  }
}

Мой компилятор Java выдает следующую ошибку:

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

НоCollections.emptyList() возвращает тип<T> List<T>неList<Object>, Добавление актеров не помогает

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

доходность

Person.java:9: inconvertible types

С помощьюEMPTY_LIST вместоemptyList()

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

доходность

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

Принимая во внимание, что следующее изменение устраняет ошибку:

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

Может кто-нибудь объяснить, с каким правилом проверки типов я здесь сталкиваюсь, и как лучше обойти это? В этом примере последний пример кода является удовлетворительным, но с большими классами я хотел бы иметь возможность писать методы, следуя этому шаблону «необязательного параметра», без дублирования кода.

Для дополнительного кредита: когда уместно использоватьEMPTY_LIST в отличие отemptyList()?

Ответы на вопрос(3)

Ваш ответ на вопрос