#java #oop
#java #ооп
Вопрос:
У меня есть класс, который распространяется на другой класс, и этот класс распространяется на другой класс.
class 1 extends class 2
class 2 extends class 3
class 3 extends class 4
class 4 extends class 5
class 5 extends class 6
Теперь я хочу найти все суперклассы класса 1.
Кто-нибудь знает, как я мог бы сделать это на java?
Ответ №1:
Используйте Class.getSuperClass()
для обхода иерархии.
Class C = getClass();
while (C != null) {
System.out.println(C.getName());
C = C.getSuperclass();
}
Комментарии:
1. Просто чтобы убедиться, это привело бы к выводу: 1,2,3,4,5,6, если бы это было C.getSimpleName() вместо C.getName()?
Ответ №2:
Вы можете использовать getSuperclass()
вплоть до Object
.
Но сначала прочитайте документ, чтобы понять, что он возвращает в случае интерфейсов и т.д. На той же странице есть и другие методы, с которыми можно поиграть.
Комментарии:
1. о да!! хороший … спасибо .. вызывайте цикл, пока я не получу объект как суперкласс !!:) …
2. Да, или null … смотрите документ 🙂
Ответ №3:
В качестве варианта с узким циклом вместо этого вы можете использовать for
цикл:
for (Class super_class = target_class.getSuperclass();
super_class != null;
super_class = super_class.getSuperclass())
// use super class here
Ответ №4:
Рекурсивно вызывайте, getSuperclass
начиная с экземпляра Class1
, пока не достигнете Object
.
Ответ №5:
Используйте отражение:
public static List<Class> getSuperClasses(Object o) {
List<Class> classList = new ArrayList<Class>();
Class clazz = o.getClass();
Class superclass = clazz.getSuperclass();
classList.add(superclass);
while (superclass != null) {
clazz = superclass;
superclass = class.getSuperclass();
classList.add(superclass);
}
return classList;
}
Комментарии:
1. Это приведет к добавлению null в коллекцию, если вы передадите экземпляр Object методу. Вы должны выполнить все вызовы class.getSuperclass() в цикле while.
Ответ №6:
Другие ответы верны в отношении использования Class.getSuperclass()
. Но вам придется делать это неоднократно. Что-то вроде
Class superClass = getSuperclass();
while(superClass != null) {
// do stuff here
superClass = superClass.getSuperclass();
}