我正在尋找方法遍歷Java中的任意對象層次結構。顯然,直接使用反射API是一種選擇,但是在它之上構建的庫可以使任務更容易?遍歷對象hirerarchy
具體而言,我想抓取所有直接或間接從實現給定接口的基礎對象引用的對象。層次結構可以包含循環,雖然我正在尋找的對象將形成DAG,所以理想情況下我希望它們按拓撲順序返回。
我正在尋找方法遍歷Java中的任意對象層次結構。顯然,直接使用反射API是一種選擇,但是在它之上構建的庫可以使任務更容易?遍歷對象hirerarchy
具體而言,我想抓取所有直接或間接從實現給定接口的基礎對象引用的對象。層次結構可以包含循環,雖然我正在尋找的對象將形成DAG,所以理想情況下我希望它們按拓撲順序返回。
你看過Apache BeanUtils了嗎? - >http://commons.apache.org/beanutils/
我不知道它們是否涵蓋了您需要的所有內容,但它非常好用,易於使用。
這是一個建議。如果您的物體實現了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);
}
}
不幸的是,對象層次結構更加複雜,可能有一些未知的(編譯時即是)對象,它仍然可以引用我感興趣的東西。 – biziclop