2013-04-19 21 views
5

Kodumu derlerken Object Casting'de bir uyarı mesajım var.Genel nesne için nesne türünü kontrol etmenin uygun yolu nedir?

MyObj obj1 = new MyGenericObj<Integer>(); 
if (obj1 instanceof MyGenericObj) { 
    //I was trying to check if it's instance of MyGenericObj<Integer> 
    //but my IDE saying this is wrong syntax.... 
    MyGenericObj<Integer> obj2 = (MyGenericObj<Integer>) obj1; 
    //This line of code will cause a warning message when compiling 
} 
: Ben nasıl en ben öyle MyGenericObj<T> olmayan bir Jenerik Nesne İşte MyObj

uzanan bir Genel Nesne var diyelim .... benim şu anki bilgilerle bunu düzeltmek için bir örnek kod hiçbir fikrim yok

Bunu yapmanın en uygun yolunun ne olduğunu bana bildirir misiniz?

Herhangi bir yardım için teşekkür ederiz.

cevap

6

type erasure nedeniyle, bunu yapmanın bir yolu yoktur: MyGenericObj<Integer>, tür parametresinden bağımsız olarak sahnenin arkasında bir MyGenericObj<Object>.

class MyGenericObject<T> { 
    private final Class<T> theClass; 
    public Class<T> getTypeArg() { 
     return theClass; 
    } 
    MyGenericObject(Class<T> theClass, ... the rest of constructor parameters) { 
     this.theClass = theClass; 
     ... the rest of the constructor ... 
    } 
} 

Şimdi, tip parametrenin gerçek sınıf bulmak getTypeArg kullanmak Integer.class karşılaştırabilirsiniz ve: Bu etrafında

bir yolu bu gibi, jenerik nesneye bir Class<T> özelliği ekleyerek olurdu buna dayanarak karar vermek.

+0

İlk Yardımlarınız için teşekkürler. Yani 'TheClass' nesnesinde kastediyorsunuz, nesne tipini kaydetmek için bir yer var, sonra bunu 'Integer.class' ile karşılaştırıyorsunuz? – user2296188

+0

@ user2296188 Esasen, evet - böyle bir şey yazıyorsunuz: Eğer if (MyGenericObject && ((MyGenericObject) i) 'ini .getTypeArg() == Integer.class) {...} '. Bir çalışma örneği için bu demoya bir göz atın ([link] (http://ideone.com/j85Uj9)). – dasblinkenlight

+0

Şimdi anladım ~~ Çok teşekkür ederim !!! Bunu deneyip uyarı mesajının temizlenip temizlenmediğini göreceğim ... – user2296188

İlgili konular