Object.getClass()。getSuperclass()没有返回null?

时间:2014-02-26 16:16:56

标签: java oop superclass

我有一个功能

public void get(Object s) {

  while (s.getClass().getSuperclass() != null) {
      s = s.getClass().getSuperclass();
  }
}

问题是s.getClass().getSuperclass()永远不会返回null,即使Object没有超类。

我不明白为什么会这样,虽然我多次调试了这个项目。

3 个答案:

答案 0 :(得分:8)

第一次运行循环后,sClass个实例。

s.getClass()因此总是返回Class.class,它有一个超类。

答案 1 :(得分:4)

您可以在此处将班级分配给s

s = s.getClass().getSuperclass();

然后循环条件是:

s.getClass().getSuperclass();

Class对象的类为Class.classgetSuperclass返回Object.class,因此循环条件的计算结果为true。

然后您将s分配给Object.class

s = s.getClass().getSuperclass();

谁的班级是Class.class并且有超级班级。无限重复。

为班级使用不同的变量。

Class<?> cls = s.getClass().getSuperclass();
while(cls != null) {
    cls = cls.getSuperclass();
}

答案 2 :(得分:1)

<强> Why your code won't work was explained by SLaks

你想要的是这个:

public void get(Object s)
{
    Class<?> buffer = s.getClass();

    while (buffer != null)
    {
        System.out.println(buffer);
        buffer = buffer.getSuperclass();

    }
}