gpt4 book ai didi

java - 检索 Ecore 类的包含内容

转载 作者:行者123 更新时间:2023-12-01 09:31:46 27 4
gpt4 key购买 nike

我想检索 Ecore 类的包含内容。所以我有一个像这样的结构:

class SuperClass{
protected EObject superClassProperty;
}

class SubClass extends SuperClass{
private EObject subClassProperty;
}

现在我想获取子类(subClassProperty)的所有包含内容。我这样做是这样的:

EList<EReference> _eAllContainments = eClass.getEAllContainments();

但是如果我这样做,我也会获得父类(super class)(superClassProperty)的继承包含。我怎样才能检索给定类中包含的属性(只是 subClassProperty)?

最佳答案

如果您指的是ecore,我假设您正在使用EObject元素。每EObject实现.eContents().eAllContents()方法。

它们之间的区别是:

  • .eContents()给你一个List<EObject>及其调用的类的所有直接包含功能(在元类中定义的包含 = true 的所有功能)。
  • eAllContents()给你一个TreeIterator<EObject>以您的类为根的树中的所有包含功能(基本上它在包装到迭代器中的所有直接 .eContents() 上返回 eContents() )。

因此,如果您只需要直接包含的特征的值,则只需使用 eClass.eContents() .

因为我并不完全清楚你想要实现什么:

EList<EReference> = _eAllContainments = eClass.getEAllContainments();

我将向您展示一些使用 emf 来获取您想要的对象的方法。

假设您有元类的实现对象(您应该知道实现和元类之间的区别,元类是您正在建模的EClass,而实现是EClass ,但 EClass 是一个完全独立的对象),然后您可以通过调用 .eClass() 获得对象的元 EClass就在上面。

每个EClass有关于其声明的信息EReference及其 EAttribute ,您可以通过调用获取它们,例如: .getE[All]References().getAll...还返回 EClass 定义的 super 类的所有元素.

现在您知道如何获取您定义的元对象,但是如何获取在实现对象中表示它们的实际值呢?

答案是“反射(reflection)”。 EMF 使用所谓的反射 getter ( .eGet ) 和 setter ( .eSet ),它们采用 EStructuralFeature 。并返回它的实际值。

因为每个EAttributeEReferenceEStructuralFeature您从 EClass 恢复连接为您的实现提供信息。

仅供引用:您还可以通过名称获取 EClass 的 EStructuralFeatures,然后您可以执行类似的操作:假设您的元素有一个名为 name 的属性那么:

element.eGet(element.eClass().getEStructuralFeature("name"));

为您提供元素属性的实际值。

关于java - 检索 Ecore 类的包含内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39346430/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com