Java EclassImpl setEPackage()

Java EclassImpl setEPackage(),java,emf,Java,Emf,我需要使用一些emf代码,而不知道它是如何工作的。代码使用EcoreUtil.copy(…)克隆类。我在我创建的类中添加了一个电子课堂,如下所示: EClassImpl c = (EClassImpl)EcoreFactory.eINSTANCE.createEClass(); System.out.println(c.getEPackage().getEFactoryInstance()); @Override protected EClass eStatic

我需要使用一些emf代码,而不知道它是如何工作的。代码使用EcoreUtil.copy(…)克隆类。我在我创建的类中添加了一个电子课堂,如下所示:

    EClassImpl c = (EClassImpl)EcoreFactory.eINSTANCE.createEClass();
    System.out.println(c.getEPackage().getEFactoryInstance());
    @Override
    protected EClass eStaticClass() {       
        EClassImpl c = (EClassImpl)EcoreFactory.eINSTANCE.createEClass();
        return c;
    }
还可以像这样重写eStaticClass():

    EClassImpl c = (EClassImpl)EcoreFactory.eINSTANCE.createEClass();
    System.out.println(c.getEPackage().getEFactoryInstance());
    @Override
    protected EClass eStaticClass() {       
        EClassImpl c = (EClassImpl)EcoreFactory.eINSTANCE.createEClass();
        return c;
    }
现在我有一个问题,复制例程试图使用:

    eClass.getEPackage().getEFactoryInstance().create(eClass);

它返回null指针异常,因为getEPackage()返回null。不幸的是,EPackage似乎没有设置器,因此如何设置它?

我自己设法解决了这个问题,下面是我的解决方案,以防其他人遇到此问题:

    EPackageImpl epi = (EPackageImpl)EcoreFactory.eINSTANCE.createEPackage();
    c.eBasicSetContainer(epi, EcorePackage.ECLASSIFIER__EPACKAGE, null);

我也有同样的问题。请参见他们如何使用API作为示例

samplePackage
.getEClassifiers()
.add(userClass);

这会将类添加到包中,反之亦然。

谢谢,如果我再次遇到它,我会尝试一下您的解决方案,它看起来更干净