使用 EMF,我想定义一个属性,其数据类型 (EType) 在我的 EMF 模型之外。也就是说,我想要的类型是一个普通的手工编码的 Java 类,它不属于我的 EMF 模型的一部分。使用AnySimpleType
是最后的手段。我想要比使用泛型Object
提供更多的类型安全(和更少的类型转换)。
Eclipse 的属性编辑器将 EType 限制为一组预定义的值。我既不能输入我自己的班级名称,也不能找到将我想要的班级添加到选项列表中的方法。
使用 EMF,我想定义一个属性,其数据类型 (EType) 在我的 EMF 模型之外。也就是说,我想要的类型是一个普通的手工编码的 Java 类,它不属于我的 EMF 模型的一部分。使用AnySimpleType
是最后的手段。我想要比使用泛型Object
提供更多的类型安全(和更少的类型转换)。
Eclipse 的属性编辑器将 EType 限制为一组预定义的值。我既不能输入我自己的班级名称,也不能找到将我想要的班级添加到选项列表中的方法。
eClassifiers
您可以通过手动向*.ecore 文件添加条目来向 eCore 模型添加数据类型。(我无法通过 Eclipse UI 找到执行此操作的机制。)
例如:
<eClassifiers xsi:type="ecore:EDataType"
name="MyClass" instanceClassName="my.package.MyClass"/>
这将使该类在 EAttributes 的属性编辑器中作为 EType 的一个选项可用。它似乎没有使它可用于 EReferences。
我正在使用带有 EMF 2.9.1 的 Eclipse Kepler。
添加到迈克尔的答案,在 Ecore 模型编辑器中,您只需右键单击并选择
新子级 -> EData 类型
然后在“属性”视图中填写您的值(名称、实例类型名称)。因此,您不必再手动添加它。
假设您使用 Xcore 作为建模语言,然后使用
import java.util.Date
...
type Date wraps Date
现在Date
可以用作符合String
和的属性的数据类型int
。
您对 Ecore 执行相同操作,只是您不必先显式导入类型 - 例如
<eClassifiers xsi:type="ecore:EDataType" name="Date"
instanceClassName="java.util.Date" serializable="false"/>