2013-04-19 6 views
5

У меня появилось предупреждающее сообщение об Object Casting при компиляции моего кода. Я понятия не имею, как это исправить с моим текущим знанием .... Скажем, у меня есть Generic Object MyGenericObj<T> он проходит от необщего объекта MyObjКаков правильный способ проверки типа объекта для универсального объекта?

Вот пример кода:

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 
} 

Не могли бы вы сообщить мне, что это за правильный способ?

Любая помощь приветствуется.

ответ

6

Из-за type erasure, нет способа сделать это: MyGenericObj<Integer> на самом деле MyGenericObj<Object> за сценой, независимо от ее параметра типа.

Один из способов обойти это будет добавить Class<T> свойство вашего родового объекта, например:

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

Теперь вы можете использовать getTypeArg найти фактический класс параметра типа, сравнить его с Integer.class и принять решение на основе этого.

+0

Первое спасибо за вашу помощь. Итак, вы имеете в виду объект «theClass», у вас есть место для сохранения типа объекта, и вы сравниваете его с «Integer.class»? – user2296188

+0

@ user2296188 По сути, да - вы пишете что-то вроде этого: 'if (i instanceof MyGenericObject && ((MyGenericObject) i) .getTypeArg() == Integer.class) {...}'. Взгляните на эту демонстрацию на ideone ([link] (http://ideone.com/j85Uj9)) для рабочего примера. – dasblinkenlight

+0

Я получил его сейчас ~~ Большое спасибо! Я попробую и посмотрю, очищено ли предупреждающее сообщение ... – user2296188

Смежные вопросы