使用 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"/>