单个吸气剂功能,用于多个/所有变量/集合

时间:2018-09-04 18:12:53

标签: java anylogic

是否可以构建一个接受任何字符串并返回相应变量/集合的函数?一堂课有大约54个私人收藏,我需要从另一堂课中阅读。所需集合的名称是已知的。最简单的方法是将每个收藏集设置为公开,但是我认为原始创建者将它们设置为私有是有原因的。因为它们太多了,所以我懒得通过专用的吸气剂或使用开关功能来访问它们。

编辑:我没有使用普通的GUI Java开发环境。我正在使用AnyLogic软件,该软件没有用于创建getter / setter的菜单。

3 个答案:

答案 0 :(得分:1)

  1. a)在AnyLogic中,有一个用于此目的的特殊功能:
    executeExpression( Class<T> returnType, String code )
    要访问任何集合,可以使用以下代码:
    executeExpression( List.class, "collectionName" ).get( 0 )

    b)该函数仅适用于公共变量,因此如果您定义 作为公共收藏,您将可以使用该功能。

  2. 如果将集合声明为代理参数,则可以 用功能相似的方式访问它们 getParameter(java.lang.String name)

  3. Getters和Setters可以在Eclipse中生成,只需将类代码复制粘贴到Eclipe,生成它们,然后将代码复制粘贴回AnyLogic类代码。

答案 1 :(得分:1)

如果AnyLogic类中有54个集合,则确实应该考虑重构基础结构。几种选择:

  • 考虑一组集合(或集合的集合)。如果设置常量(静态最终int),则可以轻松地说出arrayCollection [CONSTANT]。例如,可以使用arrayWidgetsInProgess [PRODUCT_A]来获取产品A类型的小部件的集合。
  • 仅考虑一个集合,并使用lambda表达式即时获取您感兴趣的对象。在可能是filter(collection,agent-> agent.agent.attribute == attributeWeWant)的AnyLogic中。

我唯一真正需要这么多集合的情况可能是允许用户通过前端定义某些内容的情况。例如,如果我有一个产品类型完全由用户定义的模型,则它们可能有10或100种产品类型。在这种情况下,我倾向于使用集合或数组或集合的集合。集合的集合可以是arrayLists的arrayList,arrayList的hashMap,hashMaps的hashMap ...

您应该准备在类启动时或在其他代码中对集合的集合/集合的数组进行一些实例化。 AnyLogic的画布将允许您执行一个集合数组,但是您实际上需要实例化数组中的那些集合。

答案 2 :(得分:0)

简短回答

停止成为一个懒惰的傻瓜,创造二传手。 每个GUI Java开发环境都在菜单中支持此操作。

仍然懒惰

使用反射来访问类并按名称获取私有字段。 尝试阅读Java Class JavaDoc page

Google会很高兴提供使用反射的代码示例。 搜索选项包括 但不限于: “ Java反射教程”和“ Java反射示例”。