我正在尝试从EA UML Class Diagram生成Java代码。我定义了两个类,他们有一个Composition Relation船。
比方说,A类包含B类的列表。
我可以在代码生成对话框中将默认集合类设置为List,并且它正确生成代码:
class B {
public List<B> m_B;
};
但是我无法自动生成import语句。如下所示:
import java.util.List;
class B {
public List<B> m_B;
};
我知道代码生成对话框中有一个部分,我可以指定完整的import语句,但我有很多类,我希望EA自动生成import语句。
我也摆弄了代码模板,但我无法在代码模板中导入除硬编码导入语句之外的任何内容。
宏
importPackagePath
importClassName
似乎是空的。
有人可以帮我修改代码模板以确定要完成的导入吗?
谢谢,
此致
VIMAL
答案 0 :(得分:7)
我认为你应该避开代码生成模板。这里的问题是集合类的处理超出了正常的代码生成。如果一个类的成员的类型是另一个包中的类,EA会生成正确的import语句 - 但前提是这些类存在于模型中,而collecion类不存在。
有三种方法可以解决这个问题:
1)接受生成的代码已损坏。
生成代码,然后在IDE(NetBeans,Eclipse或您正在使用的任何东西)中打开它,并让它在添加正确的import语句时采取有根据的猜测。
这很简单,但您需要检查结果。还有一个风险:如果你的“B”类导入一个包含“List”类的包,编译器不会抱怨,但引用的“List”类不是来自java.util的类,这意味着你'没有得到你认为你做过的代码。
2)为集合类建模。
使用子“util”和模板类“List”创建一个包“java”,然后更改模型,使其与B的关系不是0 ... *,A与此关系“1”列出“类型(不是B),但是用类型B实例化。对此的正确关系是模板绑定。
在对集合类进行建模的过程中,将rt.jar导入到项目中。这需要花费很长时间,并确保禁用自动图表生成,否则可能会耗尽内存。但是,您将一劳永逸地导入所有实用程序类。
如果您想要安全起见,请从Java选项(工具 - 选项 - 源代码工程 - Java)中删除集合类,因此EA不会尝试使用它们。但是,如果您更改了所有关系,EA将不会使用已配置的集合类。
这导致了最正确的模型,并且还解决了如何引用其他实用程序类(例如Calendar)的问题,但是如果你有一个没有集合类的大型模型,那么可以做很多工作。 / p>
3)对集合类使用完全限定名称。
在Java选项中,输入List<#TYPE#>
而不是java.util.List<#TYPE#>
。如果类型由其完全限定名称引用,则Java编译器不需要import语句。
这非常简单快捷,生成的代码也是正确的。缺点是代码变得更加笨重。
如果你只需要收集课程,我会选择这个。如果你想引用其他常见的实用程序类,我会说导入rt.jar并重做模型。