У меня возникли проблемы с навигацией по правилу 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()
?