我正在使用Acceleo-MTL来生成Java类。如何从我的抽象超类中获取所有抽象方法?
为了获得简单的操作和接口,我使用以下命令:
[comment]Operators[/comment]
[for (o : Operation | class.getOperations())]
[o.generateOperation()/]
[/for]
[comment]Interface Methods[/comment]
[for (interf : Interface | class.getImplementedInterfaces())]
[for (o : Operation | interf.ownedOperation)]
[o.generateInterace()/]
[/for]
[/for]是否存在用于抽象方法的getter方法,例如接口的getImplementedInterfaces()?
发布于 2013-05-17 17:12:39
这完全取决于您的元模型以及如何导航它。IIRC,Class.getImplementedInterfaces()是来自UML的东西,所以我假设您正在使用它。
此外,您似乎想要做的是“检索给定分类器的所有操作,包括继承的操作”。为了满足这样的需求,永远不应该有任何理由自己在超类和接口层次上导航。在统一建模语言中,这是通过Classifier.getAllOperations()完成的,这意味着您可以通过:
[for (o : Operation | class.getAllOperations())]
[o.generateOperation()/]
[/for]如果您绝对需要自己迭代接口和超类,请记住您需要递归地浏览整个层次结构:您的类的超类和接口,您的类的超类和接口,超类...直到继承树的根。您还必须处理UML的多重继承功能,从而解决它带来的潜在歧义。为此,您需要熟悉UML模型。例如,检索超类是通过Class.getSuperClasses()完成的。确定这些超类中是否有一个是抽象的是通过Class.isAbstract()完成的……诸若此类。
附带说明可能会对您有所帮助:您可以在工作区中导入UML元模型,以便快速了解其概念以及如何在其中导航。为此:
使用弹出窗口,导航到File > Import...
Next
Next
Finish
现在,您的工作区中有一个名为org.eclipse.uml2.uml的新项目。您可以打开org.eclipse.uml2.uml\model\uml.ecore文件来查看UML元模型。
https://stackoverflow.com/questions/16592570
复制相似问题