如标题所述:我想知道是否有可能遍历AnyLogic项目的对象树。
如果我提供更多信息,可能会有所帮助。采取以下项目树:
我想检查模型中的每个延迟对象,当前是否包含代理。一种可能性是将所有延迟对象手动添加到集合对象,并遍历集合的元素。但是,这种方法将导致大量手动工作,因为我需要对其他对象类型执行类似的请求。我认为,最方便的解决方案是遍历项目树并使用“ isinstanceof”标识要分析的对象。
有谁知道需要类似的较少工作的解决方案或其他方法?
最好的祝福,
塞巴斯蒂安
您可以这样做遍历Main中的所有对象:
for (Object currObject : ((Agent)getRootAgent()).getEmbeddedObjects()) {
if (currObject instanceof Delay) {
// you found a Delay object
}
}
谢谢,我还有两个问题:
1)我不太熟悉Java,并认为只能使用点语法(即object.property)访问对象的属性和方法。这是我第一次看到这样的东西((Agent)getRootAgent())。方括号和Agent和getRootAgent之间的缺失点使我感到困惑。您能给我解释一下基本概念的称呼吗?我想了解更多。
2)通过您的方法,我能够识别所有延迟对象。但是,似乎无法访问延迟的属性和属性,例如,使用“ System.out.print(currObject.getName())”打印对象的名称。出现错误消息,说明未为对象类型定义方法getName()。任何想法如何解决这个问题?
关于1:这称为类型转换,是普通的Java功能。
关于2:应用类型转换:)应该可以使用“((Delay)currObject).getName()”之类的东西