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]にしておく必要がある