SORU
18 Aralık 2009, Cuma


Neden't Java değil jenerik şeyleşiyor olması umrumda olsun ki?

Bu aday Java dili eklendi görmek isteyen bir şey olarak bir röportajda son zamanlarda sorulan bir soru gibi geldi. Bu sık görülen bir ağrı Java yok reified generics ama, ne zaman itti, aday olamaz aslında bana bu tür şeyler olmuş olabilir elde edildi.

Açıkçası raw tür Java (ve güvensiz denetim) izin verilen olduğundan, jenerik yıkmak ve aslında String s içeren List<Integer>ile sonuna kadar mümkündür. Bu açıkça edildi tür bilgileri şeyleşiyor imkansız hale gelebilir;ama bu daha fazla olmalı!

İnsanlar bir şeyler örnekleri göndermek olabilirgerçekten yapmak istiyorum, şeyleşiyor jenerik edildi kullanılabilir? Belli ki zamanında List türü - ama onunla ne yapardın? alabilir yani

public <T> void foo(List<T> l) {
   if (l.getGenericType() == Integer.class) {
       //yeah baby! err, what now?

EDİTHızlı bir güncelleme cevap olarak bu esas olarak bir parametre (örneğin EnumSet.noneOf(TimeUnit.class)) Class bir geçmek gerek endişe gibi görünüyor. Çizgisinde daha fazla bir şey arıyordumbu sadece mümkün değil. Örneğin:

List<?> l1 = api.gimmeAList();
List<?> l2 = api.gimmeAnotherList();

if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
    l1.addAll(l2); //why on earth would I be doing this anyway?

CEVAP
18 Aralık 2009, Cuma


Sık beni ısıran şeyin birden fazla yararlanmak için yetersizlik birden fazla genel türler arasında merkez. Aşağıdaki mümkün değil ve en iyi çözüm olur birçok durumlar vardır:

public void my_method(List<String> input) { ... }
public void my_method(List<Integer> input) { ... }

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChasesAndCrashes

    ChasesAndCra

    31 Temmuz 2009
  • Huot Media

    Huot Media

    7 Mayıs 2010
  • MisterBrightside

    MisterBright

    24 Mart 2006