问题/问题
给定一个来自非 EMF 感知 API 的普通 Java 类,例如
public class BankAccount {
String ownerName;
int accountNumber;
// ...
}
并且让我们假设我不允许更改或重新编译这个类(因为它来自 API)。
是否有任何简单的方法可以将此类用作 EMF 中 EClass 的 ESuperType?(当然,单个类只是一个示例。我需要包装一个由 30-50 个类组成的 API ...)。
自己的想法
就个人而言,我认为开箱即用是不可能的。
我只能想到两种方法,都比较费力,也不容易实现。
创建一个 Ecore 模型,它反映了原始类(
EBankAccount
、 haveownerName
和accountNumber
asEAttributes
)和一个实用方法/机制,该实用方法/机制通过将原始对象的字段复制到相应的对象中EStructuralFeatures
并添加EAdapter
负责同步两个对象的 s 来包装原始对象。连接到 EMF.CodeGen 并在那里做一些魔术,这使得在生成的代码中可以将原始类作为超类,同时仍然履行 EMF 合同(= 实现
EObject
接口等)。
但也许 EMF (或现有的扩展)有一些隐藏的功能可以按照这些方式做一些事情,我不知道吗?