如果你指的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
我認爲你需要更多的解釋你面臨的問題。 ;) –