Java 在EMF中有可能将POJO作为ESuperType吗?

Java 在EMF中有可能将POJO作为ESuperType吗?,java,eclipse,emf,ecore,Java,Eclipse,Emf,Ecore,问题/问题 给定一个来自非EMF感知API的普通Java类,如 public class BankAccount { String ownerName; int accountNumber; // ... } 另外,我们假设不允许我更改或重新编译这个类(因为它来自API) 有没有简单的方法可以将该类用作EMF中电子类的ESuperType?(当然,单个类只是一个例子。我需要包装一个由30-50个类组成的API…) 自己的想法 就我个人而言,我认为这是不可能开箱即用的

问题/问题

给定一个来自非EMF感知API的普通Java类,如

public class BankAccount {
    String ownerName;
    int accountNumber;

    // ...
}
另外,我们假设不允许我更改或重新编译这个类(因为它来自API)

有没有简单的方法可以将该类用作EMF中电子类的ESuperType?(当然,单个类只是一个例子。我需要包装一个由30-50个类组成的API…)

自己的想法

就我个人而言,我认为这是不可能开箱即用的

我只能想到两种方法,都需要付出相当的努力,而且不容易实现

  • 创建一个反映原始类(
    EBankAccount
    ,将
    ownerName
    accountNumber
    作为
    EAttributes
    )的Ecore模型以及一种实用方法/机制,通过将原始对象的字段复制到相应的
    EStructuralFeatures
    中来包装原始对象,并添加负责同步这两个对象的
    EAdapter
    s

  • 挂接EMF.CodeGen并在那里做一些魔术,使原始类成为生成代码中的超级类成为可能,同时仍然满足EMF契约(=实现
    EObject
    接口等)


  • 但也许EMF(或现有的扩展)有一些隐藏的特性,可以按照这些思路做一些事情,而我不知道

    我不清楚您真正想要什么,但我将尝试描述几个选项

    如果您只想扩展POJO(这是问题文本所建议的),答案是肯定的,您可以简单地向模型添加一个新的EClass,并在“实例类型名称”属性中引用POJO限定名称。然后您可以创建从这个类扩展而来的其他类,但是它的状态不会由EMF管理

    但是如果您想让EMF像跟踪真正的EMF对象一样跟踪POJO状态(因此这些属性也是EstrestructuralFeature),那么我看不到其他解决方案,您真的需要完全在EMF中对其建模

    在第二种情况下,您描述的两个选项似乎都是可能的。

  • 您描述的第一个选项(我猜您的意思是要同步2个对象,而不是2个类)似乎是最简单的选项,我认为如果您通过反射使用一些通用方法,不会花费太多精力。
    如果将对象放置在非常具体的位置,那么这可能是一个很好的解决方案,因此只需要在特定的位置进行包裹和展开。否则,您将需要始终转换(包装/展开)对象

  • 这也是可能的,但确实需要更多的努力,因为扩展javajet模板并不容易


  • 我不知道这有什么扩展。

    我不清楚您真正想要什么,但我将尝试描述几个选项

    如果您只想扩展POJO(这是问题文本所建议的),答案是肯定的,您可以简单地向模型添加一个新的EClass,并在“实例类型名称”属性中引用POJO限定名称。然后您可以创建从这个类扩展而来的其他类,但是它的状态不会由EMF管理

    但是如果您想让EMF像跟踪真正的EMF对象一样跟踪POJO状态(因此这些属性也是EstrestructuralFeature),那么我看不到其他解决方案,您真的需要完全在EMF中对其建模

    在第二种情况下,您描述的两个选项似乎都是可能的。

  • 您描述的第一个选项(我猜您的意思是要同步2个对象,而不是2个类)似乎是最简单的选项,我认为如果您通过反射使用一些通用方法,不会花费太多精力。
    如果将对象放置在非常具体的位置,那么这可能是一个很好的解决方案,因此只需要在特定的位置进行包裹和展开。否则,您将需要始终转换(包装/展开)对象

  • 这也是可能的,但确实需要更多的努力,因为扩展javajet模板并不容易

  • 我不知道这有任何扩展。

    +1表示“实例类型名称”属性。我从来没用过。我将使用它,看看它做了什么…+1表示“实例类型名称”属性。我从来没用过。我会玩它,看看它能做什么。。。