Другой ответ, безусловно, правильный. Во всяком случае, я думаю, что вы делаете что-то довольно необычное.
Я постараюсь объяснить:
Обобщения используются для статического полиморфизма. Экземпляр универсального типа определяется во время компиляции.
Конструкции типа instanceof используются для проверки динамического типа объекта во время выполнения, поэтому, если вы их используете, вы можете просто избежать использования обобщений.
(Вы можете использовать универсальный объект в качестве параметра для вашей функции, а затем использовать instanceof для проверки его типа)
Например:
public void method(Object o){
if (o instanceof String){} //do what you want
else ....
}
Как правило, если вы используете дженерики, вы просто пытаетесь избежать таких конструкций. Обычно универсальный тип может реализовывать хорошо известный интерфейс таким образом, что любая операция, выполняемая над этим объектом в вашем методе фильтра, может выполняться для различных типов объектов, реализующих этот интерфейс, без знания конкретного типа вовлеченных объектов.
Я не знаю точно, какие полиморфные свойства вам нужны, в любом случае, вы можете попробовать что-то подобное:
public interface polymorphicObj{
public method();
}
public class Filter<GENERIC implements polymorphicObj>{
public filter(GENERIC obj){
obj.method(); //you don't need to know of which specific type is polymorphicObj
}
}