[解決済み] リフレクションを使ってメソッドが静的であるかどうかを確認するにはどうすればよいですか?
2022-10-30 01:45:19
質問
あるクラスの静的メソッドのみを実行時に検出したいのですが、どのようにすればよいのでしょうか。 または、静的メソッドと非静的メソッドを区別する方法。
どのように解決するのですか?
使用方法
Modifier.isStatic(method.getModifiers())
.
/**
* Returns the public static methods of a class or interface,
* including those declared in super classes and interfaces.
*/
public static List<Method> getStaticMethods(Class<?> clazz) {
List<Method> methods = new ArrayList<Method>();
for (Method method : clazz.getMethods()) {
if (Modifier.isStatic(method.getModifiers())) {
methods.add(method);
}
}
return Collections.unmodifiableList(methods);
}
注意:このメソッドはセキュリティの観点からすると実は危険です。Class.getMethods "bypass[es] SecurityManager checks depending on the immediate caller's class loader" (Java secure coding guidelinesのセクション6を参照してください).
免責事項: テストしていませんし、コンパイルすらしていません。
備考
Modifier
は注意して使用する必要があります。intとして表されるフラグは型安全ではありません。よくある間違いは、適用されないReflectionオブジェクトのタイプで 修飾フラグをテストすることです。同じ位置のフラグが他の情報を示すために設定されていることがあります。
関連
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】静的なMapを初期化する方法は?
最新
-
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の非静的メソッドを静的に参照することができない
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
Javaジェネリックを1つの記事で
-
FindBugの使用概要
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
Junitのユニットテストエラー
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集