如果你指的Ecore的,我假设你正在使用EObject
元素。 每个EObject
实施.eContents()
和.eAllContents()
方法。
它们之间的区别是:
.eContents()
为您提供了所有直接遏制功能List<EObject>
这就是所谓的类(在元类中定义与遏制=真正的所有功能)。 虽然eAllContents()
为您提供了所有的控制功能的一个TreeIterator<EObject>
与你的等级为根树
左右(基本上它的所有直接eContents()
裹成一个迭代器的返回.eContents()
),如果你只想要直接包含的值功能然后只需使用eClass.eContents()
因为它并不完全清楚,我你想达到什么:
EList<EReference>
= _eAllContainments = eClass.getEAllContainments ();
我会告诉你一些使用emf来获得你想要的对象的方法。
假设你有一个你的元类的实现对象(你应该知道实现和元类之间的区别,元类是你正在建模的EClass
,实现是,是这个的实现EClass
,但EClass是一个完全独立的对象),然后通过调用.eClass()
来获得对象的meta-EClass。
每个EClass
关于其宣布EReference
和EAttribute
,您可以通过调用如让他们的信息:.getE[All]References()
,在.getAll...
也返回你EClass
的定义超类中的所有元素。
因此,现在您知道如何获得您定义的元对象,但是如何在实现对象中获得表示它们的实际值?
答案是“反思”。 EMF使用所谓的反射性吸气剂(.eGet
)和制定者(.eSet
),它们采用EStructuralFeature
并返回实际值。
因为每个EAttribute
和EReference
是EStructuralFeature
你得到的连接从您的EClass
信息反馈给你实现。
FYI:你也可以得到你的EClass的名字的EStructuralFeatures,那么你可以做这样的事情: 认为你的元素有被称为name
那么属性:
element.eGet(element.eClass().getEStructuralFeature("name"));
给你的实际值为你的元素的属性。
这个问题出了什么问题?一些反馈意见会适当地以适当的方式提出。 – landunder
我认为你需要更多的解释你面临的问题。 ;) –