当前位置: 首页 > 知识库问答 >
问题:

是否可以在EMF Ecore模型中使用枚举实现接口?

岳英锐
2023-03-14

是否可以在EMF Ecore模型中使用枚举实现接口?在Java中可以有类似的内容:public enum MyEnum implements myinterface。我希望能够通过EMF生成这样的内容(顺便说一句,默认情况下EMF生成的所有枚举都实现org.eclipse.EMF.common.util.enumerator)。

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

现在,我所做的是每次修改模型中的枚举时手动添加implements并在其余时间保留@generatednot标记。我觉得在几个月后这将变得危险,因为我会忘记它,或者更糟的是,当其他人试图修改它时,即使有适当的文档记录。

有点相关:EMF Eclipse:带有自定义字段(属性)的枚举

共有1个答案

伯君浩
2023-03-14

枚举由eenum的实例表示。接口由eclass实例表示,该实例的interface值设置为true

EClass的接口可以在geteallsupertypes()处获得。

请注意,eenumeclassemodelement的不同子接口,因此除了在emodelement中公开的成员之外,不共享任何成员。
这是因为java对枚举的处理是特殊的,将它们作为特殊类实现。EMF的目的是允许对枚举更“常见”的理解,因为它们不能公开接口。

interface Foo {
    void bar();
    Baz baz(Quux quux);
}
enum Gen implements Foo { ... }
class GenFoo {
    static void bar(Foo foo);
    static Baz baz(Foo foo, Quux quux);
}

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

 类似资料:
  • 问题内容: 我正在尝试将我的某些Obj-C类转换为Swift。还有其他一些Obj- C类仍在该转换后的类中使用枚举。我在“预发布文档”中进行了搜索,但找不到它,或者我错过了它。有没有办法在Obj- C类中使用Swift枚举?或指向此问题的文档的链接? 这就是我在旧的Obj-C代码和新的Swift代码中声明枚举的方式。 我以前的Obj-C代码: 我的新Swift代码: 更新: 从答案。在Swift低

  • 从这个问题,有可能注入map与枚举? 例如,我有枚举: 我有一些与实现的接口: 但这样的注入不起作用: 我想自动注入。如何修复它,在spring框架端生成这样的代码?

  • 问题内容: Python 3.4引入了一个新模块,该模块向该语言添加了枚举类型。的文档提供了一个示例来演示如何扩展它: 此示例还演示了一个问题:在property方法中,定义了一个常量,该常量通常在类级别定义- 但是尝试在a级别内执行此操作只会将其添加为枚举的成员之一,因此,在方法内部定义。 如果该类想在其他方法中使用此常量,则也必须在其中定义它,这显然不是理想的选择。 有什么方法可以在中定义类常

  • 问题内容: 是否可以在Java枚举中使用,还是需要使用?在我的测试中,它始终有效,但是我不确定是否可以保证。特别是,在枚举上没有方法,因此我不知道是否有可能获得一个枚举,该枚举将返回不同于的值。 例如,这样可以吗: 还是我需要这样写: 问题答案: 仅需2美分:这是Sun发布的Enum.java的代码,并且是JDK的一部分:

  • 问题内容: 在Java中有可能发生这种情况吗?可以为Java中的枚举元素分配自定义数值吗? 问题答案:

  • 问题内容: 我已经读过,可以使用以下方式在Java中实现: 但是,以上内容如何运作?具体来说,必须实例化an 。在这里,如何实例化?谁在做什么? 问题答案: 这个, 有一个隐式的空构造函数。相反,让它明确 如果你随后使用类似的方法添加了另一个类 你会看到 字段是编译时间常数,但它们是其类型的实例。并且,它们是在首次引用枚举类型时构造的。