2010-04-23 34 views
4

我必須實現一個邏輯,給定一個子類,我需要訪問它的父類和該父類的所有其他子類(如果有的話)。我沒有在Java Reflection中找到任何API,它允許我們訪問父類的所有子類。有什麼辦法可以做到嗎?訪問Java中每個父類的子類

例如:

class B extends class A 
class C extends class A 

現在用B類,我可以通過調用getSuperClass()找到超類。但是有沒有辦法找到所有的子類,只要我有父類,即類B和類C?

+2

您是否將此特定問題設置爲家庭作業,或者您是否設置了其他問題,並且此問題是您實施解決方案的一部分?我問,因爲另一種解決方案可能是針對您的問題採取不同的方法。 – 2010-04-23 00:15:08

+0

@Stephen:這是家庭作業的要求之一,與任何其他要求/問題無關。 – 2010-04-23 03:45:05

回答

5

你是對的:這裏沒有直接的API。我想你可以掃描所有加載的類,看看它們是否是給定類的子類。

一個問題:你只能找到已經加載的類。這些方法都不會找到尚未加載的類。

-1

您可以使用:

thisObj.getClass().getSuperclass() 
thisObj.getClass().getInterfaces() 
thisObj.getClass().getGenericInterfaces() 
thisObj.getClass().getGenericSuperclass() 

我最近編碼的東西掃描類的成員,如果這些是非元掃描那些爲好。但是,我沒有向上走,所以我沒有使用上述方法,但我相信他們應該做你想做的。

編輯: 我跑了以下簡單的測試:

public class CheckMe { 
    public CheckMe() { 
    } 
} 

public class CheckMeToo extends CheckMe { 
    public CheckMeToo() { 
    } 
} 
// In main 
System.out.println(CheckMeToo.class.getSuperclass()); 

// Output 
class CheckMe 

,它的編碼遍歷的問題後。如果它的參數化,那麼事情可能會變得有點複雜,但仍然可行。

編輯:對不起,沒有仔細閱讀,讓我看看它進一步。

編輯:似乎沒有任何辦法可以做到這一點,而無需掃描CLASSPATH中的所有內容,並檢查以確保某個對象是某個類的實例。