Сравнивание объектов через instanceof

Рейтинг: 1Ответов: 2Опубликовано: 02.05.2015

Есть метод, которому в качестве аргумента может передаться объект любого класса, данный метод должен проверить посредством instanceof к какому классу принадлежит передаваемый объект:

public class Alligator implements Predator {}

public class Panda implements Herbivore {}

public class Check{
    Object naturalEnemy = new Alligator();// Проверяемый по умолчанию класс, !!!!может изменятся!!!!!!
    public static void main(String[] args){
        System.out.println(""+checkAnimal(new Alligator()));//
        System.out.println(""+checkAnimal(new Panda()));
    }
    public boolean checkAnimal(Object animal){
        if(naturalEnemy instanceof animal.getClass()) return true;// Не работает :(
        //if(naturalEnemy instanceof Predator) return true;// Работает, но подобный подход не приемлим.
    }
}

Подвох в том что ни один из сравниваемых объектов не известен, и выводить клас в текстовую строку тоже не приемлимо. Помогите кто чем может. Заранее спасибо.

Ответы

▲ 4Принят

UPD 3: Вместо instanceof используйте Class.isInstance. instanceof тут неприменим

То есть Вашу проверку

if(naturalEnemy instanceof animal.getClass()) return true;

нужно заменить на

return naturalEnemy.getCLass().isInstance(animal);

или на

animal.getCLass().isInstance(naturalEnemy);

в зависимости от того, какое из животных Вы проверяете

▲ 1

сделайте абстрактный класс abstract class Animal и всех животных наследовать от него.

public class Predator extends Animal

а потом проверять

if(naturalEnemy instanceof Animal)