[解決済み] プライベートメソッドを呼び出す方法はありますか?
2022-04-24 07:50:40
質問
XML とリフレクションを使って
Object
を別のクラスへ送る。
通常、これらのオブジェクトは外部オブジェクトのサブフィールドですが、たまにその場で生成したいものがあります。このようなことを試したことがあるが、無駄だった。それは、Javaが以下のようなアクセスを許さないからだと思います。
private
メソッドでリフレクションを行うことができます。
Element node = outerNode.item(0);
String methodName = node.getAttribute("method");
String objectName = node.getAttribute("object");
if ("SomeObject".equals(objectName))
object = someObject;
else
object = this;
method = object.getClass().getMethod(methodName, (Class[]) null);
提供されたメソッドが
private
で失敗します。
NoSuchMethodException
. メソッドを作成することで解決できました。
public
または、別のクラスを作成してそこから派生させる。
長い話になりますが、私はただ単に
private
メソッドをリフレクションで実行します。
どのように解決するのですか?
リフレクションでプライベートメソッドを呼び出すことができます。投稿されたコードの最後のビットを修正する。
Method method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
Object r = method.invoke(object);
いくつか注意点があります。まず1つ目。
getDeclaredMethod
で宣言されたメソッドのみが検索されます。
Class
スーパータイプから継承されたものではありません。そのため、必要に応じて、具象クラスの階層をたどってください。次に
SecurityManager
の使用を防ぐことができます。
setAccessible
メソッドを使用します。そのため
PrivilegedAction
(を使用)。
AccessController
または
Subject
).
関連
-
linux run jarfile Invalid or corrupt jarfile error.
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] Java のメソッド名を文字列で指定した場合、どのように呼び出すのですか?
-
[解決済み] Javaリフレクションを用いた静的なプライベートfinalフィールドの変更
-
[解決済み】Javaで異なるクラスからプライベートフィールドの値を読み取る方法は?
-
[解決済み】Reflection。パラメータを指定してメソッドを呼び出す方法
最新
-
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 エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
IllegalArgumentException この例外を解決する方法
-
Dateが型に解決できない問題を解決する
-
javaの模造品QQ WeChatのチャットルーム
-
サーブレットクラスのインスタンス化エラーの解決法
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
linux run jarfile Invalid or corrupt jarfile error.
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
IDEA パッケージステートメントの欠落
-
テストが見つかりませんでした