1. 反映するメソッドの取得
反映メソッドを取得する場合、getMethod と getDeclaredMethod の 2 つのメソッドがあります。
class Class { @CallerSensitive public Method getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException { Objects.requireNonNull(name); SecurityManager sm = System.getSecurityManager(); if (sm != null) { // 1. 检查方法权限 checkMemberAccess(sm, Member.PUBLIC, Reflection.getCallerClass(), true); } // 2. 获取方法 Method method = getMethod0(name, parameterTypes); if (method == null) { throw new NoSuchMethodException(methodToString(name, parameterTypes)); } // 3. 返回方法的拷贝 return getReflectionFactory().copyMethod(method); } @CallerSensitive public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException { Objects.requireNonNull(name); SecurityManager sm = System.getSecurityManager(); if (sm != null) { // 1. 检查方法是权限 checkMemberAccess(sm, Member.DECLARED, Reflection.getCallerClass(), true); } // 2. 获取方法 Method method = searchMethods(privateGetDeclaredMethods(false), name, parameterTypes); if (method == null) { throw new NoSuchMethodException(methodToString(name, parameterTypes)); } // 3. 返回方法的拷贝 return getReflectionFactory().copyMethod(method); } }
2. Java5 では、配列とコレクションのループを簡素化する for-each ループが提供されています。 Fore-each ループを使用すると、従来の for ループでインデックスを保持したり、反復子を使用してコレクションを反復処理するときに while ループで hasNext メソッドや next メソッドを呼び出したりすることなく、配列を反復処理できます。
double[] values = ...; for(double value : values) { // TODO: 处理value } List<Double> valueList = ...; for(Double value : valueList) { // TODO: 处理value }
3. 現在のメソッドの名前を取得します
<span style= "font-family:Arial;font-size:14px;" >String methodName = Thread.currentThread().getStackTrace()[ 1 ].getMethodName(); </span>
以上がJavaでリフレクションメソッドを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。