2011-11-30 490 views
1

我正在尋找方法遍歷Java中的任意對象層次結構。顯然,直接使用反射API是一種選擇,但是在它之上構建的庫可以使任務更容易?遍歷對象hirerarchy

具體而言,我想抓取所有直接或間接從實現給定接口的基礎對象引用的對象。層次結構可以包含循環,雖然我正在尋找的對象將形成DAG,所以理想情況下我希望它們按拓撲順序返回。

回答

1

這是一個建議。如果您的物體實現了MyObject界面,則以下內容將遍歷並將所有組件提取到map

public interface MyObject{ 
     String getName(); 
     void addChild(MyObject obj); 
     MyObject[] getChildren(); 
} 

// This will visit and extract all children 
public void visitMyObject(MyObject cmp, Map hashMap){ 
     // Add this component 
     if(cmp != null) hashMap.put(cmp.getName(), cmp); 
     // Go visit all children 
     for(MyObject subComponent : cmp.getChildren()){ 
      visitMyObject(subComponent, hashMap); 
     } 
} 
+0

不幸的是,對象層次結構更加複雜,可能有一些未知的(編譯時即是)對象,它仍然可以引用我感興趣的東西。 – biziclop