2013-04-19 21 views
5

Dostałem komunikat ostrzegawczy na temat przesyłania obiektów podczas kompilowania kodu. Nie mam pojęcia jak to naprawić je z moim obecnym stanie wiedzy .... Powiedzmy mam Generic Object MyGenericObj<T> to rozciąga się od non-Generic Object MyObjJaki jest właściwy sposób sprawdzania typu obiektu dla obiektu Generic?

Oto przykładowy kod:

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 
} 

Czy możesz dać mi znać, jaki jest właściwy sposób na wykonanie tego?

Każda pomoc jest doceniana.

Odpowiedz

6

Z powodu type erasure, nie ma sposobu, aby to zrobić: MyGenericObj<Integer> jest faktycznie MyGenericObj<Object> za sceną, niezależnie od jej parametru typu.

Jednym ze sposobów obejścia tego byłoby dodanie właściwość Class<T> do obiektu ogólnego, tak:

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 ... 
    } 
} 

Teraz można użyć getTypeArg znaleźć rzeczywiste klasy parametru typu, porównać go do Integer.class i podjąć decyzję w oparciu o to.

+0

Pierwsze dzięki za pomoc. Więc masz na myśli obiekt "theClass", masz miejsce, aby zapisać typ obiektu, a następnie porównać go do "Integer.class"? – user2296188

+0

@ user2296188 Zasadniczo tak - piszesz coś takiego: 'if (i instanceof MyGenericObject && ((MyGenericObject) i) .getTypeArg() == Integer.class) {...}'. Spójrz na to demo na ideone ([link] (http://ideone.com/j85Uj9)) dla przykładu. – dasblinkenlight

+0

Mam to teraz ~~ Dziękuję bardzo !!! Wypróbuję to i zobaczę, czy komunikat ostrzegawczy jest wyczyszczony ... – user2296188

Powiązane problemy