2014-02-26 23 views
0

我有一個函數Object.getClass()。getSuperclass()不返回null?

public void get(Object s) { 

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

的事情是s.getClass().getSuperclass()從不返回null,即使Object沒有超類。

我不明白爲什麼會發生這種情況,儘管我多次調試了該項目。

回答

4

在這裏你指定一個類來s

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

然後循環條件爲:

s.getClass().getSuperclass(); 

A類對象的類是Class.classgetSuperclass返回Object.class所以循環條件計算爲真。

然後分配給sObject.class

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

,它的類Class.class,並具有超一流的。無限重複。

對類使用不同的變量。

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

很好的解釋Radiodef。保持良好的工作。 Rep'd。 – Gregg1989

8

第一次運行循環之後,s是一個Class實例。

s.getClass()因此總是返回Class.class,它有一個超類。

+0

感謝。我不明白如何解決我的問題。一旦它不再擁有超類,我該如何讓它返回null?我如何修改我的代碼以實現這一目標? – Gregg1989

+1

換句話說,第一次只做getClass()。 –

+0

@HotLicks不起作用。這是一個無盡的循環。 – Gregg1989