В продолжение моей предыдущей question, я пытаюсь написать метод, который идет как этотinstanceof не работает - что случилось с моим кодом?
public <T extends LivingThing> T getData(Class<T> clazz, Object otherParam) {
if(clazz instanceof Cat) {
//do something and return a new Cat
}
}
я получаю ошибку компиляции «Несовместимые типы условных операндов» на если условие. Что я делаю не так? Как проверить тип класса в моем методе?
UPDATE
Хорошо, я сделал изменения кода, чтобы сделать использование метода IsAssignableFrom. Вот новая проблема.
public <T extends LivingThing> List<T> getData(Class<T> classType) {
LivingThingEnum livingThing = LivingThingEnum
.getLivingThing(classType);
if (livingThings.keySet().contains(livingThing))
return livingThings.get(livingThing);
return null;
}
private Map<LivingThingEnum,List<? extends LivingThing>> livingThings;
Это дает мне несоответствие типа! - «невозможно преобразовать из списка в список». Разве T не должен расширять LivingThing, тогда в этом случае почему компилятор выдает ошибку?
Вы должны рассмотреть полиморфный интерфейс, где каждый 'LivingThing' имеет метод GetData классы, такие как 'Cat' override. Это гораздо более чистый подход. Использование 'instanceof' - это запах кода. –