複数のクラスのいくつかのプロパティを参照するために、小さなメタモデルをセットアップしようとしています。
例Person.name: 以下のクラスを使用して、 と のみを格納Person.surnameしたいMetaManager.config。name問題は、との値を保存したくないのですがsurname、フィールドへの参照です。これらのフィールドの参照を保存することで、後で渡される任意のインスタンスのnameandを取得できます。surnamePersonMetaManager.getValues()
このコードはMetamodel APIに似ていますが、これを使用する必要があるかどうかはわかりません (Metamodel は の一部でpersistenceあり、これは とは関係がないためpersistence)。この API ではPerson_.name、オブジェクトを使用してこのように参照を行いEntityTypeます。
問題は、後でインスタンスからこれらのプロパティの値を取得できるように、これらのプロパティへの参照をどのように保存できるかということです。
以下のコードは、私が達成しようとしていることのスケッチを示しています。ご覧のとおり、私の問題は in Person.getValue()and a toString()on this reference です (したがって、 on の参照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.");
}
}
}