我正在尝试设置一个小型元模型以引用多个类的某些属性。
示例:使用下面的类,我只想存储Person.name
和Person.surname
。MetaManager.config
问题是,我不想存储 and 的值name
,surname
而是对该字段的引用。通过存储该字段的这些引用,稍后我可以检索我将传递给的任何实例的name
and 。surname
Person
MetaManager.getValues()
此代码类似于Metamodel API,尽管我不确定是否应该使用它(因为 Metamodel 是其中的一部分,persistence
并且与 无关persistence
)。Person_.name
在此 API 中,使用EntityType
对象进行引用是这样的。
问题是,我可以通过什么方式存储对这些属性的引用,以便稍后从实例中检索这些属性的值?
下面的代码给出了我要完成的工作的草图。正如你所看到的,我的问题是在Person.getValue()
这个toString()
引用上(一个引用ssn
会因此返回"ssn"
)。
interface IMetable {
Object getValue(Meta meta);
}
class Person implements IMetable {
String ssn;
String name;
String surname;
Person(String ssn, String name, String surname) {
this.ssn = ssn;
this.name = name;
this.surname = surname;
}
@Override
Object getValue(ClassMeta meta) {
// Return the value of the (by meta) referenced field
return null;
}
}
class MetaManager {
Map<Class, Meta[]> config;
public Map<String, String> getValues(IMetable object) {
if(config.containsKey(object.class)) {
ClassMeta[] metamodel = config.get(object.class);
Map<String, String> values = new HashMap();
for(Meta meta : metamodel) {
values.put(meta.toString(), object.getValue(meta).toString());
}
return values;
}
else {
throw new Exception("This class has not been configurated.");
}
}
}