Package javassist

# Class CtField

java.lang.Object
javassist.CtMember
javassist.CtField

public class CtField extends CtMember
An instance of CtField represents a field.

See Also:
  - `CtClass.getDeclaredFields()`

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static class`
`CtField.Initializer`
Instances of this class specify how to initialize a field.

## Constructor Summary

Constructors
Constructor
Description
`CtField(CtClass type, String name, CtClass declaring)`
Creates a `CtField` object.
`CtField(CtField src, CtClass declaring)`
Creates a copy of the given field.

## Method Summary

Modifier and Type
Method
Description
`Object`
`getAnnotation(Class<?> clz)`
Returns the annotation if the class has the specified annotation class.
`Object[]`
`getAnnotations()`
Returns the annotations associated with this field.
`byte[]`
`getAttribute(String name)`
Obtains an attribute with the given name.
`Object[]`
`getAvailableAnnotations()`
Returns the annotations associated with this field.
`Object`
`getConstantValue()`
Returns the value of this field if it is a constant field.
`CtClass`
`getDeclaringClass()`
Returns the class declaring the field.
`FieldInfo`
`getFieldInfo()`
Returns the FieldInfo representing the field in the class file.
`FieldInfo`
`getFieldInfo2()`
Returns the FieldInfo representing the field in the class file (read only).
`String`
`getGenericSignature()`
Returns the generic signature of the field.
`int`
`getModifiers()`
Returns the encoded modifiers of the field.
`String`
`getName()`
Returns the name of the field.
`String`
`getSignature()`
Returns the character string representing the type of the field.
`CtClass`
`getType()`
Returns the type of the field.
`boolean`
`hasAnnotation(String typeName)`
Returns true if the class has the specified annotation type.
`static CtField`
`make(String src, CtClass declaring)`
Compiles the given source code and creates a field.
`void`
`setAttribute(String name, byte[] data)`
Adds an attribute.
`void`
`setGenericSignature(String sig)`
Set the generic signature of the field.
`void`
`setModifiers(int mod)`
Sets the encoded modifiers of the field.
`void`
`setName(String newName)`
Changes the name of the field.
`void`
`setType(CtClass clazz)`
Sets the type of the field.
`String`
`toString()`
Returns a String representation of the object.

### Methods inherited from class javassist.CtMember

`hasAnnotation, visibleFrom`

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

## Constructor Details

### CtField

public CtField(CtClass type, String name, CtClass declaring) throws CannotCompileException
Creates a `CtField` object. The created field must be added to a class with `CtClass.addField()`. An initial value of the field is specified by a `CtField.Initializer` object.

If getter and setter methods are needed, call `CtNewMethod.getter()` and `CtNewMethod.setter()`.

Parameters:
  `type` - field type
  `name` - field name
  `declaring` - the class to which the field will be added.
Throws:
  `CannotCompileException`
See Also:
  - `CtClass.addField(CtField)`
  - `CtNewMethod.getter(String,CtField)`
  - `CtNewMethod.setter(String,CtField)`
  - `CtField.Initializer`

### CtField

public CtField(CtField src, CtClass declaring) throws CannotCompileException
Creates a copy of the given field. The created field must be added to a class with `CtClass.addField()`. An initial value of the field is specified by a `CtField.Initializer` object.

If getter and setter methods are needed, call `CtNewMethod.getter()` and `CtNewMethod.setter()`.

Parameters:
  `src` - the original field
  `declaring` - the class to which the field will be added.
Throws:
  `CannotCompileException`
See Also:
  - `CtNewMethod.getter(String,CtField)`
  - `CtNewMethod.setter(String,CtField)`
  - `CtField.Initializer`

## Method Details

### toString

public String toString()
Returns a String representation of the object.

Overrides:
  `toString` in class `CtMember`

### make

public static CtField make(String src, CtClass declaring) throws CannotCompileException
Compiles the given source code and creates a field. Examples of the source code are:

     "public String name;"
     "public int k = 3;"

Note that the source code ends with `';'` (semicolon).

Parameters:
  `src` - the source text.
  `declaring` - the class to which the created field is added.
Throws:
  `CannotCompileException`

### getFieldInfo

public FieldInfo getFieldInfo()
Returns the FieldInfo representing the field in the class file.

### getFieldInfo2

public FieldInfo getFieldInfo2()
Returns the FieldInfo representing the field in the class file (read only). Normal applications do not need calling this method. Use `getFieldInfo()`.

The `FieldInfo` object obtained by this method is read only. Changes to this object might not be reflected on a class file generated by `toBytecode()`, `toClass()`, etc in `CtClass`.

This method is available even if the `CtClass` containing this field is frozen. However, if the class is frozen, the `FieldInfo` might be also pruned.

See Also:
  - `getFieldInfo()`
  - `CtClass.isFrozen()`
  - `CtClass.prune()`

### getDeclaringClass

public CtClass getDeclaringClass()
Returns the class declaring the field.

Overrides:
  `getDeclaringClass` in class `CtMember`

### getName

public String getName()
Returns the name of the field.

Specified by:
  `getName` in class `CtMember`
See Also:
  - `CtConstructor.getName()`

### setName

public void setName(String newName)
Changes the name of the field.

### getModifiers

public int getModifiers()
Returns the encoded modifiers of the field.

Specified by:
  `getModifiers` in class `CtMember`
Returns:
  modifiers encoded with `javassist.Modifier`.
See Also:
  - `Modifier`

### setModifiers

public void setModifiers(int mod)
Sets the encoded modifiers of the field.

Specified by:
  `setModifiers` in class `CtMember`
See Also:
  - `Modifier`

### hasAnnotation

public boolean hasAnnotation(String typeName)
Returns true if the class has the specified annotation type.

Specified by:
  `hasAnnotation` in class `CtMember`
Parameters:
  `typeName` - the name of annotation type.
Returns:
  `true` if the annotation is found, otherwise `false`.
Since:
  3.21

### getAnnotation

public Object getAnnotation(Class<?> clz) throws ClassNotFoundException
Returns the annotation if the class has the specified annotation class. For example, if an annotation `@Author` is associated with this field, an `Author` object is returned. The member values can be obtained by calling methods on the `Author` object.

Specified by:
  `getAnnotation` in class `CtMember`
Parameters:
  `clz` - the annotation class.
Returns:
  the annotation if found, otherwise `null`.
Throws:
  `ClassNotFoundException`
Since:
  3.11

### getAnnotations

public Object[] getAnnotations() throws ClassNotFoundException
Returns the annotations associated with this field.

Specified by:
  `getAnnotations` in class `CtMember`
Returns:
  an array of annotation-type objects.
Throws:
  `ClassNotFoundException`
Since:
  3.1
See Also:
  - `getAvailableAnnotations()`

### getAvailableAnnotations

public Object[] getAvailableAnnotations()
Returns the annotations associated with this field. If any annotations are not on the classpath, they are not included in the returned array.

Specified by:
  `getAvailableAnnotations` in class `CtMember`
Returns:
  an array of annotation-type objects.
Since:
  3.3
See Also:
  - `getAnnotations()`

### getSignature

public String getSignature()
Returns the character string representing the type of the field. The field signature is represented by a character string called a field descriptor, which is defined in the JVM specification. If two fields have the same type, `getSignature()` returns the same string.

Note that the returned string is not the type signature contained in the `SignatureAttirbute`. It is a descriptor.

Specified by:
  `getSignature` in class `CtMember`
See Also:
  - `Descriptor`
  - `getGenericSignature()`

### getGenericSignature

public String getGenericSignature()
Returns the generic signature of the field. It represents a type including type variables.

Specified by:
  `getGenericSignature` in class `CtMember`
Since:
  3.17
See Also:
  - `SignatureAttribute.toFieldSignature(String)`

### setGenericSignature

public void setGenericSignature(String sig)
Set the generic signature of the field. It represents a type including type variables. See `CtClass.setGenericSignature(String)` for a code sample.

Specified by:
  `setGenericSignature` in class `CtMember`
Parameters:
  `sig` - a new generic signature.
Since:
  3.17
See Also:
  - `SignatureAttribute.ObjectType.encode()`

### getType

public CtClass getType() throws NotFoundException
Returns the type of the field.

Throws:
  `NotFoundException`

### setType

public void setType(CtClass clazz)
Sets the type of the field.

This method does not automatically update method bodies that access this field. They have to be explicitly updated. For example, if some method contains an expression `t.value` and the type of the variable `t` is changed by `setType(CtClass)` from `int` to `double`, then `t.value` has to be modified as well since the bytecode of `t.value` contains the type information.

See Also:
  - `CodeConverter`
  - `ExprEditor`

### getConstantValue

public Object getConstantValue()
Returns the value of this field if it is a constant field. This method works only if the field type is a primitive type or `String` type. Otherwise, it returns `null`. A constant field is `static` and `final`.

Returns:
  a `Integer`, `Long`, `Float`, `Double`, `Boolean`, or `String` object representing the constant value. `null` if it is not a constant field or if the field type is not a primitive type or `String`.

### getAttribute

public byte[] getAttribute(String name)
Obtains an attribute with the given name. If that attribute is not found in the class file, this method returns null.

Note that an attribute is a data block specified by the class file format. See `AttributeInfo`.

Specified by:
  `getAttribute` in class `CtMember`
Parameters:
  `name` - attribute name

### setAttribute

public void setAttribute(String name, byte[] data)
Adds an attribute. The attribute is saved in the class file.

Note that an attribute is a data block specified by the class file format. See `AttributeInfo`.

Specified by:
  `setAttribute` in class `CtMember`
Parameters:
  `name` - attribute name
  `data` - attribute value