【问题标题】:Iterating through objects in project tree遍历项目树中的对象
【发布时间】:2020-02-06 16:32:09
【问题描述】:

正如标题所说:我想知道是否可以遍历 AnyLogic 项目的对象树。

如果我提供更多我想做的事情,这可能会有所帮助。采用以下项目树:

我想检查模型中的每个延迟对象,无论它当前是否包含代理。一种可能性是将所有延迟对象手动添加到集合对象并遍历集合的元素。但是,这种方法会导致大量的手动工作,因为我需要对其他对象类型执行类似的请求。在我看来,最方便的解决方案是遍历项目树并使用“isinstanceof”标识我要分析的对象。

有没有人知道一个解决方案或其他方法,需要类似的更少的努力?

最好的问候,

塞巴斯蒂安

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    您可以这样做循环遍历 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() 未为类型 Object 定义。知道如何解决这个问题吗?
    • re 1:这称为类型转换,是普通的 Java 功能。
    • re 2:应用类型转换 :) 像“((延迟)currObject).getName()”这样的东西应该可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多