Hi,
ich arbeite mit einem Framework das Properties unterstützt.
Diese sind im grunde einfach eine Hashtable in einem BaseObject.
Jetzt möchte ich gerne die Möglichkeit hinzufügen ein Feld einer Klasse als Property via Annotations zu "markieren".
Das markieren an sich funktioniert auch schon recht gut.
Also nochmal schnell:
- im BaseObject lese ich in einem non-static-initializer (ähnlich einem Konstruktor) die Annotations für Fields aus
- alle anderen Objekte Erben von BaseObject
Problem: Der Code im BaseObject findet NUR Annotations in seiner Klasse, und nicht auch die in den Abgeleiteten.
Was kann man dagegen tun?
Etwas Code, irgendwie bin ich nicht gut im Umschreiben ;-)
Auszug aus BaseObject.java
in asdf enthält in annotedPropertyFields jetzt NUR testProp => myTests, NICHT propName => blubb !!!
Jemand ne Idee?
Gruß,
loeppel
ich arbeite mit einem Framework das Properties unterstützt.
Diese sind im grunde einfach eine Hashtable in einem BaseObject.
Jetzt möchte ich gerne die Möglichkeit hinzufügen ein Feld einer Klasse als Property via Annotations zu "markieren".
Das markieren an sich funktioniert auch schon recht gut.
Also nochmal schnell:
- im BaseObject lese ich in einem non-static-initializer (ähnlich einem Konstruktor) die Annotations für Fields aus
- alle anderen Objekte Erben von BaseObject
Problem: Der Code im BaseObject findet NUR Annotations in seiner Klasse, und nicht auch die in den Abgeleiteten.
Was kann man dagegen tun?
Etwas Code, irgendwie bin ich nicht gut im Umschreiben ;-)
Auszug aus BaseObject.java
Code:
public Hashtable<String, Object> annotedPropertyFields;
@MyProperty(name="testProp")
public String test = "myTests";
//
// non static initializer
//
{
/**
* Annotations for Propertys
*/
annotedPropertyFields = new Hashtable<String, Object>();
Class<MyProperty> myPropteryAnnotation = MyProperty.class;
Field[] fields = getClass().getFields();
for( int i = 0; i < fields.length; i++ )
{
if( fields[i].isAnnotationPresent( myPropteryAnnotation ) )
{
MyProperty propertyAnnotation = fields[i].getAnnotation( myPropteryAnnotation );
System.out.print( propertyAnnotation.name() );
annotedPropertyFields.put( propertyAnnotation.name(), fields[i] );
}
}
/* --- */
}
Code:
public class Test extends BaseObject {
@MyProperty(name="propName")
public String justAFiled = "blubb";
}
Test asdf = new Test();
in asdf enthält in annotedPropertyFields jetzt NUR testProp => myTests, NICHT propName => blubb !!!
Jemand ne Idee?
Gruß,
loeppel