Je vais avoir quelques problèmes de navigation de Java est la règle pour inférer les paramètres de type générique. Considérons la classe suivante, qui a une option de paramètre de liste:
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;
}
}
Mon compilateur Java donne l'erreur suivante:
Person.java:9: The constructor Person(String, List<Object>) is undefined
Mais Collections.emptyList()
renvoie type <T> List<T>
, pas List<Object>
. L'ajout d'un cast n'aide pas
public Person(String name) {
this(name,(List<String>)Collections.emptyList());
}
les rendements
Person.java:9: inconvertible types
À l'aide de EMPTY_LIST
au lieu de emptyList()
public Person(String name) {
this(name,Collections.EMPTY_LIST);
}
les rendements
Person.java:9: warning: [unchecked] unchecked conversion
Considérant que la modification suivante fait disparaître l'erreur:
public Person(String name) {
this.name = name;
this.nicknames = Collections.emptyList();
}
Quelqu'un peut expliquer ce type de vérification de la règle, je suis à court contre ici, et le meilleur moyen de le contourner? Dans cet exemple, le dernier exemple de code est satisfaisante, mais avec de plus grandes classes, j'aimerais être capable d'écrire des méthodes suivantes ce "paramètre facultatif" modèle sans duplication de code.
Pour le crédit supplémentaire: quand est-il approprié d'utiliser EMPTY_LIST
plutôt emptyList()
?