[解決済み】Javaで異なるクラスからプライベートフィールドの値を読み取る方法は?
質問
サードパーティーのクラスがうまく設計されていません。
JAR
の1つにアクセスする必要があります。
プライベート
フィールドがあります。例えば
なぜprivateフィールドを選択する必要があるのでしょうか?
class IWasDesignedPoorly {
private Hashtable stuffIWant;
}
IWasDesignedPoorly obj = ...;
の値を取得するためにリフレクションを使用するにはどうすればよいですか?
stuffIWant
?
解決方法は?
プライベートフィールドにアクセスするには、そのフィールドをクラスの 宣言された フィールドを作成し、アクセスできるようにします。
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
EDIT
によってコメントされているように
アペルキンス
フィールドにアクセスし、アクセス可能に設定し、値を取得することで
Exception
のみですが
チェック済み
例外に注意する必要があるのは、上記のコメントです。
は
NoSuchFieldException
は、宣言されたフィールドに対応しない名前でフィールドを要求した場合にスローされます。
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
は
IllegalAccessException
は、フィールドがアクセス可能でない場合に投げられます (たとえば、プライベートなフィールドで
f.setAccessible(true)
という行があります。
は、その
RuntimeException
が投げられる可能性があるのは、以下のいずれかです。
SecurityException
は、(もしJVMの
SecurityManager
はフィールドのアクセシビリティを変更することを許可しない)、あるいは
IllegalArgumentException
を使用すると、そのフィールドのクラスの型でないオブジェクトでそのフィールドにアクセスしようとした場合、そのフィールドが使用されます。
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type
関連
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] Pythonにはクラス内に「プライベート」変数がある?
-
[解決済み] Javaリフレクションを用いた静的なプライベートfinalフィールドの変更
-
[解決済み] Django のフォームで、あるフィールドを編集できないように readonly (または disabled) にするにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.sql.SQLException: ORA-00933: SQL コマンドが正しく終了していません。
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] HashMapのtoString関数はなぜ異なる順序で自分自身を印刷するのですか?
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] なぜJPAには@Transientアノテーションがあるのですか?
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] JDBC タイプの方言マッピングがありません。1111
-
[解決済み] SubclipseとJavaHLのインストールで頭を悩ます
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] Java: getInstanceとStaticの比較