jdk/src/share/classes/java/lang/Class.java
private Method getMethod0(String name, Class<?>[] parameterTypes) {
{- -------------------------------------------
(1) まず, このクラスで定義されたメソッドの中を調べる
(探索処理は privateGetDeclaredMethods() と searchMethods() で行う).
見つかればそれをリターン.
---------------------------------------- -}
// Note: the intent is that the search algorithm this routine
// uses be equivalent to the ordering imposed by
// privateGetPublicMethods(). It fetches only the declared
// public methods for each class, however, to reduce the
// number of Method objects which have to be created for the
// common case where the method being requested is declared in
// the class which is being queried.
Method res = null;
// Search declared public methods
if ((res = searchMethods(privateGetDeclaredMethods(true),
name,
parameterTypes)) != null) {
return res;
}
{- -------------------------------------------
(1) 見つからなければ, 次にスーパークラスで定義されたメソッドの中を調べる
(探索処理は, スーパークラスに対して java.lang.Class.getMethod0() を再帰呼び出しすることで行う).
見つかればそれをリターン.
---------------------------------------- -}
// Search superclass's methods
if (!isInterface()) {
Class<? super T> c = getSuperclass();
if (c != null) {
if ((res = c.getMethod0(name, parameterTypes)) != null) {
return res;
}
}
}
{- -------------------------------------------
(1) 見つからなければ, 次にインターフェースで定義されたメソッドの中を調べる.
(探索処理は, インターフェースに対して java.lang.Class.getMethod0() を再帰呼び出しすることで行う).
見つかればそれをリターン.
---------------------------------------- -}
// Search superinterfaces' methods
Class<?>[] interfaces = getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
Class<?> c = interfaces[i];
if ((res = c.getMethod0(name, parameterTypes)) != null) {
return res;
}
}
{- -------------------------------------------
(1) 以上のどこでも見つからなければ, null をリターン.
---------------------------------------- -}
// Not found
return null;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.