问题
Using EMF, I'd like to define an attribute whose data type (EType) is external to my EMF model. That is, the type I want is a normal hand-coded Java class that is not part of my EMF model. Using AnySimpleType
is a last resort. I want more type-safety (and less type casting) than using a generic Object
provides.
Eclipse's Properties editor restricts EType to a predefined set of values. I can neither enter my own class name nor find a way to add the class I want to the list of options.
回答1:
You can add a data type to eCore models by manually adding an eClassifiers
entry to the *.ecore file. (I was unable to find a mechanism to do this through the Eclipse UI.)
For example:
<eClassifiers xsi:type="ecore:EDataType"
name="MyClass" instanceClassName="my.package.MyClass"/>
This will make the class available as an option for the EType in the Properties editor for EAttributes. It does not appear to make it available for EReferences.
回答2:
Assuming you're using Xcore as your modelling language, then use
import java.util.Date
...
type Date wraps Date
Now Date
can be used as a data type for attributes in line with String
and int
.
You do the same with Ecore, except that you don't have to explicitly import the type first - e.g.
<eClassifiers xsi:type="ecore:EDataType" name="Date"
instanceClassName="java.util.Date" serializable="false"/>
回答3:
I am using Eclipse Kepler with EMF 2.9.1.
Adding to Michael's answer, in the Ecore Model Editor you can just right click and choose
New Child -> EData Type
and then fill in your values in the Properties view (Name, Instance Type Name). So you don't have to do add it manually anymore.
来源:https://stackoverflow.com/questions/18874314/how-do-i-create-an-eattribute-whose-data-type-is-not-an-emf-class