java.lang.reflect
Class Field

java.lang.Object
  extended by java.lang.reflect.AccessibleObject
      extended by java.lang.reflect.Field
All Implemented Interfaces:
AnnotatedElement, Member

public final class Field
extends AccessibleObject
implements Member

The Field class represents a member variable of a class. It also allows dynamic access to a member, via reflection. This works for both static and instance fields. Operations on Field objects know how to do widening conversions, but throw IllegalArgumentException if a narrowing conversion would be necessary. You can query for information on this Field regardless of location, but get and set access may be limited by Java language access controls. If you can't do it in the compiler, you can't normally do it here either.

Note: This class returns and accepts types as Classes, even primitive types; there are Class types defined that represent each different primitive type. They are java.lang.Boolean.TYPE, java.lang.Byte.TYPE,, also available as boolean.class, byte.class, etc. These are not to be confused with the classes java.lang.Boolean, java.lang.Byte, etc., which are real classes.

Also note that this is not a serializable class. It is entirely feasible to make it serializable using the Externalizable interface, but this is on Sun, not me.

Since:
1.1
See Also:
Member, Class, Class.getField(String), Class.getDeclaredField(String), Class.getFields(), Class.getDeclaredFields()

Field Summary
 
Fields inherited from interface java.lang.reflect.Member
DECLARED, PUBLIC
 
Method Summary
 boolean equals(Object fld)
          Compare two objects to see if they are semantically equivalent.
 Object get(Object obj)
          Get the value of this Field.
<T extends Annotation>
T
getAnnotation(Class<T> annoClass)
          Returns the element's annotation for the specified annotation type, or null if no such annotation exists.
 boolean getBoolean(Object obj)
          Get the value of this boolean Field.
 byte getByte(Object obj)
          Get the value of this byte Field.
 char getChar(Object obj)
          Get the value of this Field as a char.
 Annotation[] getDeclaredAnnotations()
          Returns all annotations directly defined by the element.
 Class<?> getDeclaringClass()
          Gets the class that declared this field, or the class where this field is a non-inherited member.
 double getDouble(Object obj)
          Get the value of this Field as a double.
 float getFloat(Object obj)
          Get the value of this Field as a float.
 Type getGenericType()
          Return the generic type of the field.
 int getInt(Object obj)
          Get the value of this Field as an int.
 long getLong(Object obj)
          Get the value of this Field as a long.
 int getModifiers()
          Gets the modifiers this field uses.
 String getName()
          Gets the name of this field.
 short getShort(Object obj)
          Get the value of this Field as a short.
 Class<?> getType()
          Gets the type of this field.
 int hashCode()
          Get the hash code for the Field.
 boolean isEnumConstant()
          Return true if this field represents an enum constant, false otherwise.
 boolean isSynthetic()
          Return true if this field is synthetic, false otherwise.
 void set(Object object, Object value)
          Set the value of this Field.
 void setBoolean(Object obj, boolean b)
          Set this boolean Field.
 void setByte(Object obj, byte b)
          Set this byte Field.
 void setChar(Object obj, char c)
          Set this char Field.
 void setDouble(Object obj, double d)
          Set this double Field.
 void setFloat(Object obj, float f)
          Set this float Field.
 void setInt(Object obj, int i)
          Set this int Field.
 void setLong(Object obj, long l)
          Set this long Field.
 void setShort(Object obj, short s)
          Set this short Field.
 String toGenericString()
           
 String toString()
          Get a String representation of the Field.
 
Methods inherited from class java.lang.reflect.AccessibleObject
getAnnotations, isAccessible, isAnnotationPresent, setAccessible, setAccessible
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Method Detail

getDeclaringClass

public Class<?> getDeclaringClass()
Gets the class that declared this field, or the class where this field is a non-inherited member.

Specified by:
getDeclaringClass in interface Member
Returns:
the class that declared this member

getName

public String getName()
Gets the name of this field.

Specified by:
getName in interface Member
Returns:
the name of this field

getModifiers

public int getModifiers()
Gets the modifiers this field uses. Use the Modifier class to interpret the values. A field can only have a subset of the following modifiers: public, private, protected, static, final, transient, and volatile.

Specified by:
getModifiers in interface Member
Returns:
an integer representing the modifiers to this Member
See Also:
Modifier

isSynthetic

public boolean isSynthetic()
Return true if this field is synthetic, false otherwise.

Specified by:
isSynthetic in interface Member
Returns:
true if the member is synthetic
Since:
1.5

isEnumConstant

public boolean isEnumConstant()
Return true if this field represents an enum constant, false otherwise.

Since:
1.5

getType

public Class<?> getType()
Gets the type of this field.

Returns:
the type of this field

equals

public boolean equals(Object fld)
Compare two objects to see if they are semantically equivalent. Two Fields are semantically equivalent if they have the same declaring class, name, and type. Since you can't creat a Field except through the VM, this is just the == relation.

Overrides:
equals in class Object
Parameters:
o - the object to compare to
Returns:
true if they are equal; false if not
See Also:
Object.hashCode()

hashCode

public int hashCode()
Get the hash code for the Field. The Field hash code is the hash code of its name XOR'd with the hash code of its class name.

Overrides:
hashCode in class Object
Returns:
the hash code for the object.
See Also:
Object.equals(Object), System.identityHashCode(Object)

toString

public String toString()
Get a String representation of the Field. A Field's String representation is "<modifiers> <type> <class>.<fieldname>".
Example: public transient boolean gnu.parse.Parser.parseComplete

Overrides:
toString in class Object
Returns:
the String representation of the Field
See Also:
Object.getClass(), Object.hashCode(), Class.getName(), Integer.toHexString(int)

toGenericString

public String toGenericString()

get

public Object get(Object obj)
           throws IllegalAccessException
Get the value of this Field. If it is primitive, it will be wrapped in the appropriate wrapper type (boolean = java.lang.Boolean).

If the field is static, o will be ignored. Otherwise, if o is null, you get a NullPointerException, and if it is incompatible with the declaring class of the field, you get an IllegalArgumentException.

Next, if this Field enforces access control, your runtime context is evaluated, and you may have an IllegalAccessException if you could not access this field in similar compiled code. If the field is static, and its class is uninitialized, you trigger class initialization, which may end in a ExceptionInInitializerError.

Finally, the field is accessed, and primitives are wrapped (but not necessarily in new objects). This method accesses the field of the declaring class, even if the instance passed in belongs to a subclass which declares another field to hide this one.

Parameters:
o - the object to get the value of this Field from
Returns:
the value of the Field
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if o is not an instance of the class or interface declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
getBoolean(Object), getByte(Object), getChar(Object), getShort(Object), getInt(Object), getLong(Object), getFloat(Object), getDouble(Object)

getBoolean

public boolean getBoolean(Object obj)
                   throws IllegalAccessException
Get the value of this boolean Field. If the field is static, o will be ignored.

Parameters:
o - the object to get the value of this Field from
Returns:
the value of the Field
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a boolean field of o, or if o is not an instance of the declaring class of this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
get(Object)

getByte

public byte getByte(Object obj)
             throws IllegalAccessException
Get the value of this byte Field. If the field is static, o will be ignored.

Parameters:
o - the object to get the value of this Field from
Returns:
the value of the Field
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a byte field of o, or if o is not an instance of the declaring class of this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
get(Object)

getChar

public char getChar(Object obj)
             throws IllegalAccessException
Get the value of this Field as a char. If the field is static, o will be ignored.

Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a char field of o, or if o is not an instance of the declaring class of this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
get(Object)

getShort

public short getShort(Object obj)
               throws IllegalAccessException
Get the value of this Field as a short. If the field is static, o will be ignored.

Parameters:
o - the object to get the value of this Field from
Returns:
the value of the Field
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a byte or short field of o, or if o is not an instance of the declaring class of this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
get(Object)

getInt

public int getInt(Object obj)
           throws IllegalAccessException
Get the value of this Field as an int. If the field is static, o will be ignored.

Parameters:
o - the object to get the value of this Field from
Returns:
the value of the Field
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a byte, short, char, or int field of o, or if o is not an instance of the declaring class of this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
get(Object)

getLong

public long getLong(Object obj)
             throws IllegalAccessException
Get the value of this Field as a long. If the field is static, o will be ignored.

Parameters:
o - the object to get the value of this Field from
Returns:
the value of the Field
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a byte, short, char, int, or long field of o, or if o is not an instance of the declaring class of this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
get(Object)

getFloat

public float getFloat(Object obj)
               throws IllegalAccessException
Get the value of this Field as a float. If the field is static, o will be ignored.

Parameters:
o - the object to get the value of this Field from
Returns:
the value of the Field
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a byte, short, char, int, long, or float field of o, or if o is not an instance of the declaring class of this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
get(Object)

getDouble

public double getDouble(Object obj)
                 throws IllegalAccessException
Get the value of this Field as a double. If the field is static, o will be ignored.

Parameters:
o - the object to get the value of this Field from
Returns:
the value of the Field
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a byte, short, char, int, long, float, or double field of o, or if o is not an instance of the declaring class of this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
get(Object)

set

public void set(Object object,
                Object value)
         throws IllegalAccessException
Set the value of this Field. If it is a primitive field, the value will be unwrapped from the passed object (boolean = java.lang.Boolean).

If the field is static, o will be ignored. Otherwise, if o is null, you get a NullPointerException, and if it is incompatible with the declaring class of the field, you get an IllegalArgumentException.

Next, if this Field enforces access control, your runtime context is evaluated, and you may have an IllegalAccessException if you could not access this field in similar compiled code. This also occurs whether or not there is access control if the field is final. If the field is primitive, and unwrapping your argument fails, you will get an IllegalArgumentException; likewise, this error happens if value cannot be cast to the correct object type. If the field is static, and its class is uninitialized, you trigger class initialization, which may end in a ExceptionInInitializerError.

Finally, the field is set with the widened value. This method accesses the field of the declaring class, even if the instance passed in belongs to a subclass which declares another field to hide this one.

Parameters:
o - the object to set this Field on
value - the value to set this Field to
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if value cannot be converted by a widening conversion to the underlying type of the Field, or if o is not an instance of the class declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
setBoolean(Object, boolean), setByte(Object, byte), setChar(Object, char), setShort(Object, short), setInt(Object, int), setLong(Object, long), setFloat(Object, float), setDouble(Object, double)

setBoolean

public void setBoolean(Object obj,
                       boolean b)
                throws IllegalAccessException
Set this boolean Field. If the field is static, o will be ignored.

Parameters:
o - the object to set this Field on
value - the value to set this Field to
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a boolean field, or if o is not an instance of the class declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
set(Object, Object)

setByte

public void setByte(Object obj,
                    byte b)
             throws IllegalAccessException
Set this byte Field. If the field is static, o will be ignored.

Parameters:
o - the object to set this Field on
value - the value to set this Field to
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a byte, short, int, long, float, or double field, or if o is not an instance of the class declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
set(Object, Object)

setChar

public void setChar(Object obj,
                    char c)
             throws IllegalAccessException
Set this char Field. If the field is static, o will be ignored.

Parameters:
o - the object to set this Field on
value - the value to set this Field to
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a char, int, long, float, or double field, or if o is not an instance of the class declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
set(Object, Object)

setShort

public void setShort(Object obj,
                     short s)
              throws IllegalAccessException
Set this short Field. If the field is static, o will be ignored.

Parameters:
o - the object to set this Field on
value - the value to set this Field to
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a short, int, long, float, or double field, or if o is not an instance of the class declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
set(Object, Object)

setInt

public void setInt(Object obj,
                   int i)
            throws IllegalAccessException
Set this int Field. If the field is static, o will be ignored.

Parameters:
o - the object to set this Field on
value - the value to set this Field to
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not an int, long, float, or double field, or if o is not an instance of the class declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
set(Object, Object)

setLong

public void setLong(Object obj,
                    long l)
             throws IllegalArgumentException,
                    IllegalAccessException
Set this long Field. If the field is static, o will be ignored.

Parameters:
o - the object to set this Field on
value - the value to set this Field to
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a long, float, or double field, or if o is not an instance of the class declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
set(Object, Object)

setFloat

public void setFloat(Object obj,
                     float f)
              throws IllegalAccessException
Set this float Field. If the field is static, o will be ignored.

Parameters:
o - the object to set this Field on
value - the value to set this Field to
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a float or long field, or if o is not an instance of the class declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
set(Object, Object)

setDouble

public void setDouble(Object obj,
                      double d)
               throws IllegalAccessException
Set this double Field. If the field is static, o will be ignored.

Parameters:
o - the object to set this Field on
value - the value to set this Field to
Throws:
IllegalAccessException - if you could not normally access this field (i.e. it is not public)
IllegalArgumentException - if this is not a double field, or if o is not an instance of the class declaring this field
NullPointerException - if o is null and this field requires an instance
ExceptionInInitializerError - if accessing a static field triggered class initialization, which then failed
See Also:
set(Object, Object)

getGenericType

public Type getGenericType()
Return the generic type of the field. If the field type is not a generic type, the method returns the same as getType().

Throws:
GenericSignatureFormatError - if the generic signature does not conform to the format specified in the Virtual Machine specification, version 3.
Since:
1.5

getAnnotation

public <T extends Annotation> T getAnnotation(Class<T> annoClass)
Description copied from interface: AnnotatedElement
Returns the element's annotation for the specified annotation type, or null if no such annotation exists.

Specified by:
getAnnotation in interface AnnotatedElement
Overrides:
getAnnotation in class AccessibleObject
Parameters:
annoClass - the type of annotation to look for.
Returns:
this element's annotation for the specified type, or null if no such annotation exists.

getDeclaredAnnotations

public Annotation[] getDeclaredAnnotations()
Description copied from interface: AnnotatedElement
Returns all annotations directly defined by the element. If there are no annotations directly associated with the element, then a zero-length array will be returned. The returned array may be modified by the client code, but this will have no effect on the annotation content of this class, and hence no effect on the return value of this method for future callers.

Specified by:
getDeclaredAnnotations in interface AnnotatedElement
Overrides:
getDeclaredAnnotations in class AccessibleObject
Returns:
the annotations directly defined by the element.