是否有可能在EMF Ecore模型中实现接口的枚举?

问题描述 投票:3回答:1

是否有可能在EMF Ecore模型中实现枚举实现接口?在Java中,可能有类似public enum MyEnum implements MyInterface的内容。我希望能够通过EMF生成类似的东西(顺便说一句,默认情况下,似乎是EMF实现org.eclipse.emf.common.util.Enumerator生成的所有枚举)。

我找不到使生成的枚举实现特定接口的方法。我无法在ecore图编辑器或ecore模型编辑器中使用枚举定义继承关系。生成代码后,我可以将implements位手动添加到枚举中,但是每次我再次生成代码时,它都会被覆盖。

或者,是否有一种方法可以使EMF的代码生成不覆盖implements(并且只有它)?

[我知道我可以将类javadoc注释中的@generated标记修改为@generatedNOT,因此代码生成器知道它不会覆盖该类,但是当我修改模型时,它阻止了该类的更新。

现在,我每次在模型中修改此枚举时都手动添加implements,并在其余时间保留@generatedNOT标签。我觉得几个月后我会忘记它会变得很危险,或者更糟糕的是,如果有人尝试对其进行了修改,即使记录正确,也是如此。

有点相关:EMF Eclipse: enumeration with custom fields (properties)

java enums emf
1个回答
0
投票

枚举由EEnum的实例表示。接口由EEnum的实例表示,该实例的EClass的值设置为Interface

然后,在true上可以找到EClass的接口。

请注意,getEAllSuperTypes()getEAllSuperTypes()EEnum的不同子接口,因此不共享EClass中公开的成员以外的任何成员。这是因为java在处理Enums方面很特殊,将它们实现为特殊类。 EMF旨在使Enums无法公开接口时对Enums有更“常见的”理解。

因此,在EMF中不可能使Enums实现一个接口。向Enum添加接口时,您唯一的选择是手动这样做,避开所有代码生成,因为EMF不支持该特定行为。您可能要考虑的另一种方法是拥有一个或多个静态实用程序方法,这些方法通过“ currying”转换来提供该接口:

EModelElement

进入:

EModelElement

这个想法基本上是C#所实现的“扩展方法”,但是它们对此具有语言支持,而Java没有:)

© www.soinside.com 2019 - 2024. All rights reserved.