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

  • circuschina

    circuschina

    16 Mart 2007
  • Juan Carlos Candela Bordera

    Juan Carlos

    4 Mart 2009
  • Rooster Teeth

    Rooster Teet

    11 Temmuz 2006