By using
reflections, you can change the value of final fields. Following step-by-step
procedure explains how to change the value of final fields.
Step 1: Get the class
object.
Ex:
Employee emp = new Employee();
Class myClass = emp.getClass();
Step 2: get the
declared field.
Ex:
Field
myField = myClass.getDeclaredField("id")
Step 3: suppress
Java language access checking by enabling the accessibility to true for this
field.
Ex:
myField.setAccessible(true);
Step 4: Set the field
value.
class Employee { private final int id, age; Employee(int id, int age){ this.id = id; this.age = age; } Employee(){ id = -1; age = -1; } int getId(){ return id; } int getAge(){ return age; } }
import java.lang.reflect.Field; public class Test { public static void display(Employee emp) { System.out.println("---------------------------"); System.out.println("id : " + emp.getId()); System.out.println("age : " + emp.getAge()); } public static void main(String args[]) throws Exception { Employee emp = new Employee(); Class myClass = emp.getClass(); System.out.println("Setting id"); Field myField = myClass.getDeclaredField("id"); myField.setAccessible(true); myField.setInt(emp, 1); display(emp); System.out.println("Setting age"); myField = myClass.getDeclaredField("age"); myField.setAccessible(true); myField.setInt(emp, 26); display(emp); } }
Output
Setting id --------------------------- id : 1 age : -1 Setting age --------------------------- id : 1 age : 26
No comments:
Post a Comment