Arasındaki farklar nelerdir List
, List<?>
, List<T>
, List<E>
, ve List<Object>
?
1. Liste
List
: ham bir türdür, bu nedenle değildir typesafe
. Yalnızca döküm kötü olduğunda bir çalışma zamanı hatası oluşturur. Oyuncular kötü olduğunda derleme zamanı hatası istiyoruz. Kullanılması önerilmez.
2. Liste <?>
List<?>
sınırsız bir joker karakterdir. Ama bunun ne için olduğundan emin değilim? Sorunsuz bir şekilde yazdırabilirim List<?>
:
public static void test(List<?> list){
System.out.println(list); // Works
}
Bir öğeye neden öğe ekleyemiyorum List<?>
?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. <T> listesi
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Bu sözdizimini anlamıyorum. Böyle bir şey gördüm ve işe yarıyor:
public <T> T[] toArray(T[] a){
return a;
}
Bazen, görüyorum <T>
, ya <E>
, veya <U>
, <T,E>
. Hepsi aynı mı yoksa farklı bir şey mi temsil ediyorlar?
4. <Nesne>
Bu, "Yöntem test(List<Object>)
bağımsız değişken için geçerli değil " hatasını verir List<String>
:
public static void test(List<Object> list){
System.out.println(list);
}
Eğer bunu denemek o zaman "dan List<String>
için atılamaz List<Object>
" var:
test((List<Object>) names);
Kafam karıştı. String
bir alt sınıf Object
, neden List<String>
bir alt sınıf değil List<Object>
?
2
. Bunu göstermek için bazı kodlar yazıyorum2
. tyvm