0

我正在使用 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]

是否存在像getImplementedInterfaces()接口一样的抽象方法的 getter 方法?

4

1 回答 1

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 元模型。

于 2013-05-17T09:12:39.310 回答