Java EclipseEMF-有没有一种方法可以在不同的Eclipse插件中引用作为模型一部分的类,而不必存储tostring()?

Java EclipseEMF-有没有一种方法可以在不同的Eclipse插件中引用作为模型一部分的类,而不必存储tostring()?,java,eclipse,eclipse-rcp,emf,Java,Eclipse,Eclipse Rcp,Emf,eclipse插件模型中的一个类需要引用完全不同的模型和插件中的另一个类 为此,我发现了这样一个建议,即使用edatatype并用我需要链接的类型初始化它的实例类。但是,当我尝试在不同的模型中链接到我的类时,它保存了类的tostring,如下面的示例所示 <tasks description="" id="p1.tsk4" label="1" type="place" time="10"> <requiredCapabilityDescriptor>cod.gen.i

eclipse插件模型中的一个类需要引用完全不同的模型和插件中的另一个类

为此,我发现了这样一个建议,即使用edatatype并用我需要链接的类型初始化它的实例类。但是,当我尝试在不同的模型中链接到我的类时,它保存了类的tostring,如下面的示例所示

<tasks description="" id="p1.tsk4" label="1" type="place" time="10">
  <requiredCapabilityDescriptor>cod.gen.impl.CapabilityDescriptorImpl@78483404 (description: , id: cap2, label: ) (parent: null)</requiredCapabilityDescriptor>
  <involvedResource>cod.gen.impl.ResourceDescriptorImpl@2839ac4c (description: null, id: null, label: null) (cad: null, material: null, pointySurface: &lt;unset>, sharpEdges: &lt;unset>, thumbnail: null, weight: &lt;unset>) (changeCost: null, generic: &lt;unset>, investCost: null, manufacturer: null)</involvedResource>
</tasks>

cod.gen.impl。CapabilityDescriptorImpl@78483404(描述:,id:cap2,标签:)(父项:null)
cod.gen.impl。ResourceDescriptorImpl@2839ac4c(描述:null,id:null,标签:null)(cad:null,材料:null,点表面:未设置>,锐角:未设置>,缩略图:null,重量:未设置>)(变更成本:null,通用:未设置>,投资成本:null,制造商:null)
在本例中,我链接到两个不同的外部类CapabilityDescriptorImpl和ResourceDescriptorImpl。正如您所看到的,tostring是存储的,这在存储和可读性方面很不方便,而且我也不太确定这种情况下的一致性处理(我是指删除、编辑引用的实例)。根据线程,由于我选择了可序列化的数据类型,所以编写了tostring,我尝试了使其不可序列化,但没有成功

因此,我尝试了另一种使用电子引用的方法,它将要保存的字符串减到最小

<tasks description="" id="p1.tsk4" label="1" type="place" time="10">
 <requiredCapabilityDescriptor xsi:type="CoD:CapabilityDescriptor" description="" id="cap2" label=""/>
  <involvedResource xsi:type="CoD:ResourceDescriptor"/>
</tasks>

它在可读性和存储方面要好得多,但我真的怀疑它是一个实际的引用,因为它不包含任何可以引用原始实例的内容。实际上,我确信它不是指原始对象,因为它没有显示任何EconContainer。再次是一致性问题

我能想到的最后一个选项是存储被引用对象的URI,但在这种情况下,我必须自己管理所有的一致性问题

因此,我的问题是“有没有更好的方法来实现这种外部类引用?”

受其启发。我已经做了以下工作:

  • 首先,我将所有单独的模型文件放入其中一个模型文件的包中
  • 将genmodel导出到每个包的单独XSD
  • 确保每个xsd文件中的导入标记指向导入模型的有效xsd URL
  • 在我的插件中分发xsd文件
  • 在每个插件中创建genmodel时,我刚刚引用了导入模型的genmodel(必须以相同的导入顺序生成genmodel,一个不导入任何模型,然后是仅依赖于它的模型,依此类推)
  • 现在使用一个引用来指向不同模型中的类
  • 这创建了一个如下所示的xmI文件

     <c xmlns:c="platform:/resource/my_project/Resource/c.xsd">
      <c:res C:id="r" C:label="r">
        <C:des>My.des#//@rDes.0</C:des>
      </C:resources>
    </C:c>
    
    
    My.des#/@rDes.0
    
    这指向另一个名为My.des的XMI文件,它的灵感来自于。我已经做了以下工作:

  • 首先,我将所有单独的模型文件放入其中一个模型文件的包中
  • 将genmodel导出到每个包的单独XSD
  • 确保每个xsd文件中的导入标记指向导入模型的有效xsd URL
  • 在我的插件中分发xsd文件
  • 在每个插件中创建genmodel时,我刚刚引用了导入模型的genmodel(必须以相同的导入顺序生成genmodel,一个不导入任何模型,然后是仅依赖于它的模型,依此类推)
  • 现在使用一个引用来指向不同模型中的类
  • 这创建了一个如下所示的xmI文件

     <c xmlns:c="platform:/resource/my_project/Resource/c.xsd">
      <c:res C:id="r" C:label="r">
        <C:des>My.des#//@rDes.0</C:des>
      </C:resources>
    </C:c>
    
    
    My.des#/@rDes.0
    
    指向另一个名为My.des的XMI文件