Почему «t instanceof T» не допускается, если T - параметр типа, а t - переменная?

Eclipse говорит, что операция instanceof не разрешена с параметром типа из-за ластика универсального типа.

Я согласен с тем, что во время выполнения информация о типе не сохраняется. Но рассмотрим следующее общее объявление класса:

class SomeClass<T>{
    T t;
    SomeClass(Object o){
        System.out.println(o instanceof T);   // Illegal
    }   
}        

Во время выполнения T не будет! Но если я создам экземпляр этого класса типа Integer, тогда соответствующий объект будет иметь поле t типа Integer.

Тогда почему я не могу проверить тип переменной с помощью T, который можно заменить на Integer во время выполнения. И я бы сделал что-то вроде «o instanceof Integer».

В каких случаях разрешение instanceof с параметром типа может вызвать проблемы, поэтому это запрещено?

6
задан whitehat 5 January 2012 в 11:47
поделиться