反射类成员对象的成员属性

176 阅读1分钟

Student类里有个ClassRoom成员,目标是修改ClassRoom里的数据

public class Student {
    private static String name = "anshon";
    private static ClassRoom classRoom = new ClassRoom("23");
}
public class ClassRoom {
    private final String num;
    private final String level;

    public ClassRoom(String num) {
        this.num = num;
        this.level = "high";
    }
}
try{
    Field field = Student.class.getDeclaredField("classRoom");
    field.setAccessible(true);

    ClassRoom room = (ClassRoom) field.get(null);

    Field levelField = ClassRoom.class.getDeclaredField("level");
    levelField.setAccessible(true);

    Field modifiersField = Field.class.getDeclaredField("accessFlags");
    modifiersField.setAccessible(true);
    modifiersField.setInt(levelField, levelField.getModifiers() & ~Modifier.FINAL);

    String level = (String) levelField.get(room);
    Log.e(TAG, "pre level: " + level);
    levelField.set(room, "middle");
    Log.e(TAG, "cur level: " + levelField.get(room));

}catch(Exception e){
    e.printStackTrace();
}