여러 클래스의 일부 속성을 참조하기 위해 작은 메타 모델을 설정하려고합니다.클래스의 메타 처리 (속성 참조)
예 : 아래의 클래스를 사용하여, 나는 MetaManager.config
만 Person.name
및 Person.surname
를 저장하고 싶습니다. 문제는, name
과 surname
의 값을 저장하는 것이 아니라 필드에 대한 참조를 저장하는 것입니다. 필드의 이러한 참조를 저장하면 나중에 name
및 surname
을 Person
의 인스턴스 중 MetaManager.getValues()
으로 가져올 수 있습니다.
이 코드는 의 일부이며 이후 persistence
과 관련이 없으므로이 코드를 사용해야하는지 잘 모르겠지만이 코드는 Metamodel API과 비슷합니다. 이 API에서는 EntityType
개체를 사용하여 Person_.name
과 같은 참조를 만듭니다.
질문은 나중에 이러한 속성의 값을 나중에 인스턴스에서 검색 할 수 있도록 이러한 속성에 어떤 참조를 저장할 수 있습니까?
아래 코드는 내가 성취하려는 것을 보여줍니다. 당신이 볼 수 있듯이, 내 문제는 Person.getValue()
과 에 대한 참조는 "ssn"
을 반환합니다.이 참조에 대한 toString()
입니다.
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.");
}
}
}
예 예 예! 리플렉션 API는 내가 찾고 있었던 것이고, 어떻게 생각했는지는 모른다. +1 :) – Aquillo