Обеспечение объекта наследуется от другого в Java - PullRequest
0 голосов
/ 10 июня 2011

Как узнать, унаследован ли объект от другого объекта?

Допустим, у меня есть абстрактный класс A. Как узнать, является ли объект экземпляром класса, унаследованного от A?

boolean inherited = false;
for (Class c : instance.getClasses()) {
    if (c == A.class) {
        inherited = true;
        break;
    }
}

Это работает? Кажется, это немного тяжело для того, чего я пытаюсь достичь.

Ответы [ 3 ]

4 голосов
/ 10 июня 2011

instanceof должен нормально работать в этой ситуации, но возникает вопрос о том, почему вы пытаетесь сделать что-то таким образом, если, возможно, есть лучшее более ООП решение основной проблемы.

2 голосов
/ 10 июня 2011

instanceof абстрактный класс также должен быть instanceof некоторым классом, который расширяет этот абстрактный класс. Вы не можете создавать экземпляры абстрактных классов, но вы можете создавать экземпляры объектов класса, который расширяет его.

Это также может помочь понять, что любой созданный вами объект является instanceof Object. это связано с тем, что Object находится на вершине иерархии отношений подкласса для создаваемых классов.

1 голос
/ 10 июня 2011

Если вы действительно хотите проверить наследование:

ClassUtils.getAllSuperclasses(c.getClass()).contains(A.class);

ClassUtils - это служебный класс из Apache Commons Lang .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...