|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.josql.internal.Setter
public class Setter
This class is used to perform access into a Java object using a String value with a specific notation.
The Accessor uses a dot notation such as field1.method1.method2 to perform the access on an object. Each value in the notation refers to a field or method (a no argument method) of the type of the previous value. For instance if you have the following class structure:
public class A { public B = new B (); } public class B { public C = new C (); } public class C { String d = ""; }
You would then use the notation: B.C.d to get access to
field d in Class C.
The Accessor also supports a [ ] notation for accessing
into Lists/Maps and Arrays. If the value between the [ ]
is an integer then we look for the associated type to be either
an array or a List, we then index into it with the integer. If
the value is NOT an integer then we use assume the
type is a Map and use it as a key into the Map.
For instance changing the example above:
public class A { public List vals = new ArrayList (); }
Method[] methods = c.getMethods (); for (int i = 0; i < methods.length; i++) { if ((methods[i].getName ().equals (getMethod.toString ())) && (methods[i].getParameterTypes ().length == 0) ) { // This is the one... return methods[i]; } } return null; Now we could use: vals[X] where X is a positive integer. Or changing again:
public class A { public Map vals = new HashMap (); }
We could use: vals[VALUE] where VALUE would then be
used as a Key into the vals HashMap.
Note: The Accessor is NOT designed to be an all purpose
method of gaining access to a class. It has specific uses and for
most will be of no use at all. It should be used for general purpose
applications where you want to access specific fields of an object
without having to know the exact type. One such application is in
the GeneralComparator
, in that case arbitrary Objects can
be sorted without having to write complex Comparators or implementing
the Comparable interface AND it gives the flexibility that sorting
can be changed ad-hoc.
The Accessor looks for in the following order:
Note: we have had to add the 3rd type to allow for methods that don't follow JavaBeans conventions (there are loads in the standard Java APIs which makes accessing impossible otherwise).
Constructor Summary | |
---|---|
Setter(String ref,
Class clazz,
Class[] parmTypes)
|
Method Summary | |
---|---|
Class |
getBaseClass()
|
Class |
getType()
Get the class of the type of object we expect in the setValue(Object,Object)
method. |
void |
setValue(Object target,
Object value)
|
void |
setValue(Object target,
Object[] values)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public Setter(String ref, Class clazz, Class[] parmTypes) throws IllegalArgumentException, NoSuchMethodException
ref
- The reference for the setter.clazz
- The Class to get the field from.
IllegalArgumentException
NoSuchMethodException
Method Detail |
---|
public Class getBaseClass()
public void setValue(Object target, Object value) throws IllegalAccessException, InvocationTargetException, IllegalArgumentException
IllegalAccessException
InvocationTargetException
IllegalArgumentException
public void setValue(Object target, Object[] values) throws IllegalAccessException, InvocationTargetException, IllegalArgumentException
IllegalAccessException
InvocationTargetException
IllegalArgumentException
public Class getType()
setValue(Object,Object)
method.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |