[Java]特定クラスのprivateフィールドを参照

Javaのクラスにおいて
外部クラスのprivateフィールドに
アクセスするためのロジックです。

※本来なら外部クラスからアクセスさせないための
修飾子なのでどうてもアクセスする必要があるなら
修飾子側を変更するのが正しい解答です。
今回これを考えた理由はアクセスしたい対象が
提供されたライブラリだったので修飾子側を変更できなかったからです。

ソースコード

public class A {
	// private フィールド
	private String pri_test;
}
public class B extends A {
	public String getPrivateField() {
		try {
			Field fd = A.class.getDeclaredField("pri_test");
			fd.setAccessible(true);
			return (String)fd.get(this);
		} catch( Exception e ) {
			return null;
		}
	}
}

解説

ロジックの流れとしては
①対象となるクラスの子クラスを作成
②クラス[Field]を生成し、参照したいクラスのフィールド名を指定する。
③生成したクラス[Field]の値を返す。
※生成したクラス[Field]のインスタンスの関数[setAccessible]の値を
[true]にしておく必要がある


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)