如何创建一个数据类型不是 EMF 类的 EAttribute?

8
使用 EMF,我想定义一个属性,其数据类型(EType)不属于我的 EMF 模型。也就是说,我想要的类型是一种普通的手写 Java 类,并不是我的 EMF 模型的一部分。使用 AnySimpleType 是最后一招。我想要更多的类型安全性(和 less type casting),而不是使用通用的 Object 提供的类型。
Eclipse 的 Properties 编辑器将 EType 限制为预定义的一组值。我既不能输入自己的类名,也找不到向选项列表中添加我想要的类的方法。
3个回答

6
你可以通过手动在*.ecore文件中添加eClassifiers条目来向eCore模型添加数据类型。(我找不到通过Eclipse UI执行此操作的机制。)
例如:
<eClassifiers xsi:type="ecore:EDataType"
 name="MyClass" instanceClassName="my.package.MyClass"/>

这将使该类在EAttributes的属性编辑器中作为选项可用。看起来它似乎不会使其在EReferences中可用。

5
我正在使用带有EMF 2.9.1的Eclipse Kepler。
除了Michael的回答外,在Ecore模型编辑器中,您只需右键单击并选择
新建子级 -> EData类型
然后在属性视图中填写您的值(名称,实例类型名称)。因此,您不必再手动添加它。

4
假设您使用Xcore作为建模语言,则使用以下内容:
import java.util.Date
...
type Date wraps Date

现在,Date可以作为与Stringint相同的属性数据类型来使用。

在Ecore中也可以这样做,但是您不必先显式导入该类型 - 例如:

<eClassifiers xsi:type="ecore:EDataType" name="Date"
   instanceClassName="java.util.Date" serializable="false"/>

我正在使用ecore,所以这对我没有帮助,但仍然是好的信息。 - Michael Carman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接