Genel tür parametrelerini çıkarmak için Java'nın kuralında gezinirken sorun yaşıyorum. İsteğe bağlı bir liste parametresine sahip olan aşağıdaki sınıfı düşünün:
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 derleyicim aşağıdaki hatayı veriyor:
Person.java:9: The constructor Person(String, List<Object>) is undefined
Ancak Collections.emptyList()
türü döndürür <T> List<T>
, döndürmez List<Object>
. Oyuncu kadrosu eklemek yardımcı olmaz
public Person(String name) {
this(name,(List<String>)Collections.emptyList());
}
verim
Person.java:9: inconvertible types
Kullanma EMPTY_LIST
yerineemptyList()
public Person(String name) {
this(name,Collections.EMPTY_LIST);
}
verim
Person.java:9: warning: [unchecked] unchecked conversion
Ancak aşağıdaki değişiklik hatayı ortadan kaldırır:
public Person(String name) {
this.name = name;
this.nicknames = Collections.emptyList();
}
Burada hangi tür denetleme kuralını çalıştırdığımı ve bunun üstesinden gelmenin en iyi yolunu açıklayan var mı? Bu örnekte, son kod örneği tatmin edicidir, ancak daha büyük sınıflarla, kodu çoğaltmadan bu "isteğe bağlı parametre" desenini izleyerek yöntemler yazabilmek istiyorum.
Ekstra kredi için: EMPTY_LIST
aksine ne zaman kullanılmalı emptyList()
?