EclassImpl setEPackage()
EclassImpl setEPackage()
我需要使用一些 emf 代码,但不知道它是如何工作的。该代码使用 EcoreUtil.copy(...) 克隆 classes。我在 class 中添加了一个 EClass,我是这样创建的:
EClassImpl c = (EClassImpl)EcoreFactory.eINSTANCE.createEClass();
System.out.println(c.getEPackage().getEFactoryInstance());
并像这样覆盖 eStaticClass():
@Override
protected EClass eStaticClass() {
EClassImpl c = (EClassImpl)EcoreFactory.eINSTANCE.createEClass();
return c;
}
现在我遇到了问题,复制例程试图使用:
eClass.getEPackage().getEFactoryInstance().create(eClass);
其中 returns 一个空指针异常,因为 getEPackage() returns 为空。不幸的是,EPackage似乎没有setter,那我该如何设置呢?
我设法自己解决了这个问题,这是我的解决方案,以防其他人遇到这个问题:
EPackageImpl epi = (EPackageImpl)EcoreFactory.eINSTANCE.createEPackage();
c.eBasicSetContainer(epi, EcorePackage.ECLASSIFIER__EPACKAGE, null);
有同样的问题。在 http://emfjson.org/docs/ 中查看他们如何使用 API 作为示例。
samplePackage
.getEClassifiers()
.add(userClass);
这会将 class 添加到包中,反之亦然。
我需要使用一些 emf 代码,但不知道它是如何工作的。该代码使用 EcoreUtil.copy(...) 克隆 classes。我在 class 中添加了一个 EClass,我是这样创建的:
EClassImpl c = (EClassImpl)EcoreFactory.eINSTANCE.createEClass();
System.out.println(c.getEPackage().getEFactoryInstance());
并像这样覆盖 eStaticClass():
@Override
protected EClass eStaticClass() {
EClassImpl c = (EClassImpl)EcoreFactory.eINSTANCE.createEClass();
return c;
}
现在我遇到了问题,复制例程试图使用:
eClass.getEPackage().getEFactoryInstance().create(eClass);
其中 returns 一个空指针异常,因为 getEPackage() returns 为空。不幸的是,EPackage似乎没有setter,那我该如何设置呢?
我设法自己解决了这个问题,这是我的解决方案,以防其他人遇到这个问题:
EPackageImpl epi = (EPackageImpl)EcoreFactory.eINSTANCE.createEPackage();
c.eBasicSetContainer(epi, EcorePackage.ECLASSIFIER__EPACKAGE, null);
有同样的问题。在 http://emfjson.org/docs/ 中查看他们如何使用 API 作为示例。
samplePackage
.getEClassifiers()
.add(userClass);
这会将 class 添加到包中,反之亦然。