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 添加到包中,反之亦然。