Collections.emptyList () gibt eine Liste <Object> zurück?
Ich habe Probleme beim Navigieren in Javas Regel, um auf generische Typparameter zu schließen. Betrachten Sie die folgende Klasse mit einem optionalen Listenparameter:
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;
}
}
Mein Java-Compiler gibt den folgenden Fehler aus:
Person.java:9: The constructor Person(String, List<Object>) is undefined
AberCollections.emptyList()
gibt Typ @ zurü<T> List<T>
, nichtList<Object>
. Das Hinzufügen einer Besetzung hilft nicht
public Person(String name) {
this(name,(List<String>)Collections.emptyList());
}
ergibt
Person.java:9: inconvertible types
UsingEMPTY_LIST
Anstatt vonemptyList()
public Person(String name) {
this(name,Collections.EMPTY_LIST);
}
ergibt
Person.java:9: warning: [unchecked] unchecked conversion
Wenn die folgende Änderung den Fehler beseitigt:
public Person(String name) {
this.name = name;
this.nicknames = Collections.emptyList();
}
Kann mir jemand erklären, gegen welche Typüberprüfungsregel ich hier verstoße und wie ich das am besten umgehen kann? In diesem Beispiel ist das endgültige Codebeispiel zufriedenstellend, aber bei größeren Klassen möchte ich in der Lage sein, Methoden nach diesem "optionalen Parameter" -Muster zu schreiben, ohne Code zu duplizieren.
Für zusätzliches Guthaben: Wann ist es angebracht, @ zu verwendeEMPTY_LIST
im Gegensatz zuemptyList()
?