【问题标题】:All super classes of a class一个类的所有超类
【发布时间】:2021-04-19 19:29:06
【问题描述】:

我有一个类扩展到另一个类,而那个类又扩展到另一个类。

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 中如何做到这一点?

【问题讨论】:

    标签: java oop


    【解决方案1】:

    使用Class.getSuperClass() 遍历层次结构。

    Class C = getClass();
    while (C != null) {
      System.out.println(C.getName());
      C = C.getSuperclass();
    }
    

    【讨论】:

    • 只是为了确保,如果它是 C.getSimpleName() 而不是 C.getName(),这将输出:1,2,3,4,5,6?
    【解决方案2】:

    您可以使用getSuperclass() 直到Object

    但请先阅读文档以了解它在接口等情况下返回的内容。在同一页面上可以使用更多方法。

    【讨论】:

    • 哦,是的!不错...thx ..调用循环,直到我将 Object 作为超类 !!:) ...
    • 是的,或者为 null ... 查看文档 :)
    【解决方案3】:

    作为一种变体,使用紧密循环,您可以改用for 循环:

    for (Class super_class = target_class.getSuperclass();
         super_class != null;
         super_class = super_class.getSuperclass())
      // use super class here
    

    【讨论】:

      【解决方案4】:

      Class1 的实例开始递归调用getSuperclass,直到到达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;
        }
        

        【讨论】:

        • 如果您将 Object 的实例传递给方法,这会将 null 放入集合中。您应该在 while 循环中执行所有 class.getSuperclass() 调用。
        【解决方案6】:

        关于使用Class.getSuperclass(),其他答案是正确的。但是你必须反复这样做。类似的东西

        Class superClass = getSuperclass();
        while(superClass != null) {
            // do stuff here
            superClass = superClass.getSuperclass();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-07
          • 1970-01-01
          • 2012-06-19
          • 2019-01-03
          • 2012-08-20
          • 1970-01-01
          • 2014-06-06
          • 1970-01-01
          相关资源
          最近更新 更多