public final class Reflector
extends java.lang.Object
Reflector.Getter
s und Reflector.Setter
s fuer eine Klasse
und erlaubt danach Zugriffe per Reflection auf selbige.JsonDeserializer
's und JsonBuilder
's entwickelt,
kann jedoch auch fuer andere Zwecke verwendet werden.getGetter(String, Class, long)
triggert die Analyse
der Klasse und liegt dann im Cache.public
Field
s aufgenommen.
Eine Annotation mittels Reflector.Reflectable
kann jedoch auch
andere Varianten erzwingen. Dies gilt insbesondere fuer statics
und methods
. Letztere werden zuerst analysiert.
D.h. ein getX()
(wenn annotiert) wird immer
vor einem public x
ausgewertet bzw. vermerkt.abstract
und mittels
Reflector.Discriminators
annotiert, so koennen abgeleitete Instanzen
bei der Deserialisierung im konkreten Fall in den richtige Typ
uebersetzt werden. Es spricht aber auch nichts dagegen, dass
eine Super-Klasse konkret ist.private
-Member-Field
explizit annotiert werden.
Das ist gewollt, eben um Site-Effects und nicht gewollte Automatismen
zu unterbinden.Reflector.Getter
,
Reflector.Setter
Modifier and Type | Class and Description |
---|---|
static class |
Reflector.ConstantGetter
Konkrete Klasse eines
Reflector.Getter s die einen statisch/konstanten
Wert zurueckliefert. |
static interface |
Reflector.Discriminator
Mappt einen benannten Typ (String) auf eine konkrete
Class . |
static interface |
Reflector.Discriminators
Benennt einen Member (oder Methode) als Typ-Property (String)
und assoziert hierzu konkrete
Class es als
Reflector.Discriminator s. |
static class |
Reflector.FieldGetter
Konkrete Klasse fuer den lesenden Zugriff auf ein Feld einer Klasse.
|
static class |
Reflector.FieldSetter
Konkrete Klasse fuer den schreibenden Zugriff auf ein Feld einer Klasse.
|
static class |
Reflector.Getter
Abstrakte Basis fuer den lesenden Zugriff per Reflection
auf Members einer Klasse.
|
static class |
Reflector.MemberAccess
Steuert den Zugriff per Reflection entweder fuer Lesend,
Schreibend, beides oder keinen.
|
static class |
Reflector.MethodGetter
Konkrete Klasse fuer den lesenden Zugriff auf eine Property via Funktion einer Klasse.
|
static class |
Reflector.MethodSetter
Konkrete Klasse fuer den schreibenden Zugriff auf eine Property via Funktion einer Klasse.
|
static class |
Reflector.ParamType |
static interface |
Reflector.Reflectable
Steuert abweichendes Verhalten eines
Reflector s. |
static class |
Reflector.Setter
Abstrakte Basis fuer den schreibenden Zugriff per Reflection
auf Members einer Klasse.
|
Modifier and Type | Method and Description |
---|---|
static Reflector.Getter |
getGetter(java.lang.String key,
java.lang.Class<?> rootClass,
long filter)
Liefert einen
Reflector.Getter fuer den lesenden Zugriff. |
static java.util.Iterator<Reflector.Getter> |
getGetters(java.lang.Class<?> rootClass,
long filter) |
static Reflector.Setter |
getSetter(java.lang.String key,
java.lang.Class<?> rootClass,
long filter)
Liefert einen
Reflector.Setter fuer den schreibenden Zugriff. |
static java.util.Iterator<Reflector.Setter> |
getSetters(java.lang.Class<?> rootClass,
long filter) |
static Reflector.ParamType |
T(java.lang.Class<?> clazz,
java.lang.reflect.Type... generics)
Statische Fabrik fuer benutzerdefinierte, hierarchische Typen.
|
public static Reflector.Setter getSetter(java.lang.String key, java.lang.Class<?> rootClass, long filter)
Reflector.Setter
fuer den schreibenden Zugriff.Reflector.FieldSetter
oder ein Reflector.MethodSetter
sein.key
- String Schluessel/Alias (normalerweise der Name) eines MembersrootClass
- Class
dieser Klassefilter
- long (0=kein Filter), sonst Binaervergleich und Attribut-Filter.Reflector.Setter
oder null
, wenn nicht vorhanden.Reflector.Setter.setValue(Object, Object)
,
Reflector
public static Reflector.Getter getGetter(java.lang.String key, java.lang.Class<?> rootClass, long filter)
Reflector.Getter
fuer den lesenden Zugriff.Reflector.FieldGetter
, ein Reflector.ConstantGetter
oder ein
Reflector.MethodGetter
sein.key
- String Schluessel/Alias (normalerweise der Name) eines MembersrootClass
- Class
dieser Klassefilter
- long (0=kein Filter), sonst Binaervergleich und Attribut-Filter.Reflector.Getter
Reflector.Getter.getValue(Object)
,
Reflector
public static java.util.Iterator<Reflector.Getter> getGetters(java.lang.Class<?> rootClass, long filter)
public static java.util.Iterator<Reflector.Setter> getSetters(java.lang.Class<?> rootClass, long filter)
public static Reflector.ParamType T(java.lang.Class<?> clazz, java.lang.reflect.Type... generics)
T(ArrayList.class, BigInteger[].class)
clazz
- Class
, Zielklasse, darf auch abstrakt sein, z.B. Map.generics
- VarArray of Type
or Class
Reflector.ParamType