SORU
5 Mart 2010, Cuma


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
5 Mart 2010, Cuma


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 Classgösterir belirli bir türü temsil eden nesne. Örneğin, sınıf edebi String.class Classgösterir bu türü temsil eden nesne String ve aynıdır Class zaman döndürülen nesne yöntem getClass üzerinde çağrılır String 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 Classvardır onun zamanı temsil eden nesne yazın. Olarak adlandırılır List.class.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • Friday Night Cranks

    Friday Night

    27 Mayıs 2007
  • FF Radioo

    FF Radioo

    14 ŞUBAT 2007