2012-01-06 7 views
5

parametre ArrayList olduğunu <T> Ben T'nin className nasıl alabilirimparametre <T> ArrayList nedir ve nasıl T'nin SinifAdi alabilirsiniz

public static <T extends Object> void test(ArrayList<T> list){ 
     T temp; 
     Class classType=temp.getClass(); 
     System.out.println(classType.getName()); 
} 
O derlemek için başarısız olacak

: o yerel değişken geçici olmayabilir başlatıldı.

Ancak, şablon sınıfının className değerini nasıl edinebilirim?

cevap

6

Sen genel tür elde edemezsiniz. Bu, jeneriklerin Java'da nasıl uygulandığından kaynaklanmaktadır (tip silme kullanılarak). Temel olarak, derleme zamanında de tip hataları yakalamak için generic kullanacaksınız sadece edebilirsiniz.

Kişisel kod başlatılmamış bir yerel değişkeni getClass aramaya çalışıyorum, çünkü derlenmeyecektir.

Bunun yerine ne olabilir geçerli: listeye ek olarak bir Class<T> parametrede

  • geçişli
  • kullanılmış veya (listenin ilk elemanı bakmak üzere türü hakkında yöntemini anlatmak için varsa) ve çalışma zamanı türünün yeterince temsilcisiyse (hangisi olmayabilir)
4

yüzünden Java jenerik uygulanmasında tip silme, yapamam. Sınıfa bilmek gerektiğinde, tipik hüner böyle, "tip belirteci" olarak adlandırılan ayrı bir parametre olarak Class geçmektir:

public static <T extends Object> void test(ArrayList<T> list, Class<T> classType) { 
} 

Bu numara altında görmek (tutorial on Java generics uzun uzadıya tartışıldı bir örnek için sayfa).

0

'T' veya Silgi'lerinizi çok az ambalajla yapabilirsiniz. İşte bununla ilgili SO tartışması. Get instance of generic type

Etrafta bu işi deneyebilirsiniz
1

: (1) liste boşsa bunu çökmez yüzden dışarı kasalı rağmen

public static <T extends Object> void test(ArrayList<T> list){ 
     if(null!=list && !list.isEmpty())   
       System.out.println(list.get(0).getClass().getName()); 
} 
+1

bu (çalışmıyor, hala çözmekte başarısız görev), (2) birinci eleman null, veya (3) birinci elementin sınıf aslında size yanlış cevap verecektir T'nin bir alt sınıf olduğunu – newacct