2011-11-30 293 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