「Java8」リフレクションを使用してprivateのメンバー変数を変更する
環境
Windows 10 64bit
Eclipse 2019
Java8
書式
クラス名 インスタンス変数名 = new クラス名();
Class<?> オブジェクト名 = インスタンス変数名.getClass();
Field 変数A = オブジェクト名.getDeclaredField(メンバー変数名);
変数A.setAccessible(true);
リフレクションを使用してクラスのprivateのメンバー変数はクラスの外部から変更できます
使用例
package com.arkgame.testinfo; import java.lang.reflect.Field; public class TestUser { public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, SecurityException, NoSuchFieldException, IllegalAccessException { Employee emp = new Employee(); //Classクラスのインスタンスを取得 Class<?> cft = emp.getClass(); Field fd; //メンバー変数を取得 fd = cft.getDeclaredField("username"); //privateのメンバー変数のアクセス可能になる fd.setAccessible(true); System.out.println("privateの変数usernameに値をセットします"); fd.set(emp, "山田太郎"); //メソッドを呼び出す System.out.println(emp.getUserName()); } } //クラスUserの定義 class Employee { //privateのメンバー変数 private String username; //メソッド public String getUserName() { return username; } }
実行結果
privateの変数usernameに値をセットします
山田太郎