我正在使用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()
接口?
答案 0 :(得分:0)
这一切都取决于您的元模型以及如何导航它。 IIRC,Class.getImplementedInterfaces()
来自UML,所以我假设你正在使用它。
此外,您似乎要做的是“检索给定分类器的所有操作,包括继承的分类器”。为了满足这些需求,不应该有任何理由在自己的超类和接口层次结构上进行导航。在UML中,这是通过Classifier.getAllOperations()
完成的,这意味着您可以通过以下方式完成所有工作:
[for (o : Operation | class.getAllOperations())]
[o.generateOperation()/]
[/for]
如果你绝对需要自己迭代接口和超类,请记住你需要递归地导航整个层次结构:类的超类和接口,超类和接口你的类的超类,超类......直到继承树的根。您还必须处理UML的多重继承功能,从而解决它带来的潜在歧义。为此,您需要熟悉UML模型。例如,检索超类是通过Class.getSuperClasses()
完成的。确定其中一个超类是否是抽象的是通过Class.isAbstract()
...等等来完成的。
可以帮助您的旁注:您可以在工作区中导入UML元模型,以快速概览其概念以及如何浏览它。为此:
File > Import...
Plug-in Development > Plug-ins and fragments
并点击Next
Next
org.eclipse.uml2.uml
org.eclipse.uml2.uml
,使其显示在右侧。Finish
您现在在工作区中有一个名为org.eclipse.uml2.uml
的新项目。您可以打开org.eclipse.uml2.uml\model\uml.ecore
文件以查看UML元模型。