Nasıl bir sınıf, genel bir tür edebi alabilirim?Java:
Genellikle, insanlar bu gibi sınıf edebi kullandığını gördüm:
Class<Foo> cls = Foo.class;
Ama eğer bu tür genel ise, örneğin, Liste ne? Bu gayet iyi çalışıyor, ama Liste parametreli olması gerektiğinden bir uyarı vardır:
Class<List> cls = List.class
Neden <?>
bir şey yapmıyorsunuz? Peki, bu tür uyuşmazlığı hatası neden olur:
Class<List<?>> cls = List.class
Bu iş olacak gibi, ama bu sadece bir sözdizimi hatası: . eski bir düz bir şey düşündüm
Class<List<Foo>> cls = List<Foo>.class
Nasıl Class<List<Foo>>
statik olarak, örneğin sınıf hazır kullanarak alabilir miyim?
Benolabilir@SuppressWarnings("unchecked")
uyarılar ilk örnek Listesinde olmayan parametreli kullanımından kurtulmak için kullanmak, Class<List> cls = List.class
, ama söylememeyi tercih ederim.
Herhangi bir öneriniz var mı?
CEVAP
Nedeniyle 33* *yapamazsın.
Java jenerik Nesne fırlatmak için sözdizimsel şeker biraz daha fazla. Göstermek için:
List<Integer> list1 = new ArrayList<Integer>();
List<String> list2 = (List<String>)list1;
list2.add("foo"); // perfectly legal
Genel tür bilgisi çalışma zamanında korunur tek örneği ise yansıma yoluyla bir sınıfın üyeleri sorguya Field.getGenericType()
ile.
Tüm bu Object.getClass()
bu imza vardır:
public final native Class<?> getClass();
Class<?>
olmak önemli parçası.
Bir başka deyişle, Java Generics FAQ:
Neden hiçbir sınıf beton parametreli türleri için değişmez var mı?
Parametreli tür çünkü, kesin bir zamanı temsil türü vardır.
Bir sınıf edebi
Class
gösterir belirli bir türü temsil eden nesne. Örneğin, sınıf edebiString.class
Class
gösterir bu türü temsil eden nesneString
ve aynıdırClass
zaman döndürülen nesne yöntemgetClass
üzerinde çağrılırString
nesne. Bir sınıf edebi olabilir çalışma zamanı tür çekler için kullanılan ve yansıma için.Parametreli tür kendi türünü kaybetmek çevrilir argümanlar derleme sırasında byte kod işlem türü silme denir . Bir olarak tür silme, tüm yan etkisi genel tür bir pay örneklemesi aynı çalışma zamanı gösterimi, yani ilgili ham yazın . Diğer bir deyişle, parametreli tip gösterimi yok kendi. Sonuç olarak, var şekillendirme sınıf bir anlamı rakamları
List<String>
gibi.sınıf ,List<Long>.class
List<?>.class
,Class
bu nesnelerin var beri. Sadece ham türüList
Class
vardır onun zamanı temsil eden nesne yazın. Olarak adlandırılırList.class
.
Nasıl iki genel türleri ile bir arabir...
Nasıl Java genel bir dizi oluşturmak i...
Nasıl&; derleme quot&; Java sınıf dosy...
Gerçekten nasıl okunur metin Java sını...
Nasıl bir java boyutunu alabilirim.sql...