【问题标题】:Enterprise Architect Java Code Generation File importEnterprise Architect Java 代码生成文件导入
【发布时间】:2012-06-24 01:49:32
【问题描述】:

我正在尝试从 EA UML 类图生成 Java 代码。我定义了两个类,它们有一个组合关系船。

比如说,A 类包含 B 类的 List。

我可以在代码生成对话框中将默认集合类设置为列表,它会正确生成代码为:

class B {
 public List<B> m_B;
};

但我无法自动生成导入语句。如下:

import java.util.List;
class B {
 public List<B> m_B;
};

我知道代码生成对话框中有一个部分可以指定完整的导入语句,但我有很多类,我希望 EA 自动生成导入语句。

我也摆弄了代码模板,但除了代码模板中的硬编码导入语句之外,我无法让它导入任何东西。

importPackagePath
importClassName

好像是空的。

谁能帮我修改代码模板以找出要完成的导入?

谢谢,

问候,

维马尔

【问题讨论】:

    标签: java uml enterprise-architect


    【解决方案1】:

    我认为您应该避开代码生成模板。这里的问题是集合类的处理超出了正常的代码生成范围。如果一个类有一个成员,其类型是另一个包中的类,EA 会生成正确的导入语句 - 但前提是模型中存在这些类,而集合类不存在。

    有三种方法可以解决这个问题:

    1) 接受生成的代码已损坏。

    生成代码,然后在 IDE(NetBeans、Eclipse 或您正在使用的任何工具)中打开它,让它在添加正确的导入语句时进行有根据的猜测。

    这既快速又简单,但您需要检查结果。还有一个风险:如果你的“B”类导入了一个包含“List”类的包,编译器不会抱怨,但引用的“List”类不是来自 java.util 的那个,这意味着你'没有得到你认为你得到的代码。

    2) 为集合类建模。

    创建一个包“java”,其中包含一个子“util”和一个模板类“List”,然后更改模型,使 A 与 B 的关系不再是 0..*,而是“1”与此“ List" 类型(不是 B),但使用 B 类型实例化。正确的关系是模板绑定。

    对集合类进行建模的方法是将 rt.jar 导入到您的项目中。不过,这需要很长时间,并确保禁用自动图表生成,否则可能会耗尽内存。但是您将一劳永逸地导入所有实用程序类。

    如果您想安全起见,请从 Java 选项(工具 - 选项 - 源代码工程 - Java)中删除集合类,这样 EA 就不会尝试使用它们。但如果您更改所有关系,EA 将不会使用配置的集合类。

    这会产生最正确的模型,并且还解决了如何引用其他实用程序类(例如日历)的问题,但是如果您有一个没有集合类的大型模型,则可能需要做很多工作。

    3) 为集合类使用完全限定的名称。

    在 Java 选项中,输入 java.util.List&lt;#TYPE#&gt;,而不是 List&lt;#TYPE#&gt;。如果类型由它们的完全限定名称引用,则 Java 编译器不需要 import 语句。

    这非常快速和简单,并且生成的代码是正确的。缺点是代码变得有点笨重。

    如果您只需要收集类来工作,我会选择这个。如果您想参考其他常见的实用程序类,我会说导入 rt.jar 并重新设计模型。

    【讨论】:

    • 嗨@Uffe,非常感谢您的回答。选项 2 似乎是一个永久的解决方案。但是由于我必须在工作中取得进展,所以我使用了您所描述的选项 1。再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2011-03-13
    • 2013-05-17
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多