问题/问题
给定一个普通的Java类来自非EMF感知的API,例如
public class BankAccount {
String ownerName;
int accountNumber;
// ...
}
并且假设我不允许更改或重新编译此类(因为它来自API)。
有没有简单的方法可以将此类用作EMF中EClass的ESuperType? (当然,单个类只是一个例子。我需要包含一个由30-50个类组成的API ......)。
自己的想法
就个人而言,我认为开箱即用是不可能的。
我只能想到两种方式,既有很多努力又不容易实现。
创建一个Ecore模型,该模型反映原始类(EBankAccount
,ownerName
和accountNumber
为EAttributes
)和实用方法/机制原始对象通过将其字段复制到相应的EStructuralFeatures
并添加EAdapter
来负责同步两个对象。
进入EMF.CodeGen并在那里做一些魔法,这使得原始类可以在生成的代码中作为超类同时仍然履行EMF合同(=实现{{1}接口等。)。
但也许EMF(或现有的扩展程序)的一些隐藏功能可以沿着这些方向做某些事情,我不知道它?
答案 0 :(得分:3)
我不清楚你真正想要什么,但我会尝试描述几个选项。
如果您只想扩展POJO(这是问题文本建议的那样),答案是肯定的,您只需在模型中添加一个新的EClass,并在“实例类型名称”中引用POJO限定名称属性。然后,您可以创建从此扩展的其他类,但其状态将不由EMF管理。
但是如果你想要EMF跟踪那个POJO状态就好像它是一个真正的EMF对象(所以那些属性也是EStructuralFeature),那么我没有看到另一个解决方案,你真的需要在EMF中完全建模它。 / p>
在第二种情况下,您描述的两个选项似乎都可能。
您描述的第一个选项(我假设您想要同步2个对象,而不是2个类)似乎是最简单的选项,我不认为如果你需要这么多努力通过反思使用一些通用方法 如果您将对象放在非常具体的位置,这可能是一个很好的解决方案,因此您只需要在特定位置进行换行和解包。否则你将需要转换为对象的转换(包装/解包)。
这也许是可能的,但肯定需要更多的努力,因为扩展Java JET模板并不容易
我不知道有任何延伸。