🤸
【Java】Classに定義されているメソッドから可視性を取得する
概要
Javaのクラス情報(java.lang.Class
)からメソッド(java.lang.reflect.Method
)の一覧を取得できるのですが、その可視性(publicなど)はMethodで定義されているメソッドでは直接取得できないように見えます。もちろん実際は取得できる方法があるのですが、その取得方法を少し調べてみたので今回書きます。
前提や対応方法
- 今回は
java.lang.Class
からgetDeclaredMethodsを使って、メソッドの一覧を取得します。こちらの記事にある通り、getMethods()
ではpublicのメソッドしか取得できないので。 - 可視性を取得するにはこちらの記事にある通り、まずはMethodから
getModifiers
を呼んで、言語修飾子の整数値を取得します。その整数値をModifierクラスを使って判定します。
Modifierクラスについてはクラス・メンバーの属性の記事も参考になります。
実装サンプル
メソッドの可視性を取得して、文字列としてメソッド名と一緒に出力します。
public static void outputMethodVisibility(Class c) {
Arrays.stream(c.getDeclaredMethods())
.forEach(m -> {
if (Modifier.isPublic(m.getModifiers())) {
System.out.print("public ");
} else if (Modifier.isPrivate(m.getModifiers())) {
System.out.print("private ");
} else if (Modifier.isProtected(m.getModifiers())) {
System.out.print("protected ");
} else {
System.out.println("package private ");
}
System.out.println(m.getName());
});
}
Discussion