我有一个功能
public void get(Object s) {
while (s.getClass().getSuperclass() != null) {
s = s.getClass().getSuperclass();
}
}
问题是s.getClass().getSuperclass()
永远不会返回null
,即使Object
没有超类。
我不明白为什么会这样,虽然我多次调试了这个项目。
答案 0 :(得分:8)
第一次运行循环后,s
是Class
个实例。
s.getClass()
因此总是返回Class.class
,它有一个超类。
答案 1 :(得分:4)
您可以在此处将班级分配给s
:
s = s.getClass().getSuperclass();
然后循环条件是:
s.getClass().getSuperclass();
Class对象的类为Class.class
,getSuperclass
返回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();
}
}