jdk/src/share/classes/java/lang/Class.java
// Returns an array of "root" methods. These Method objects must NOT
// be propagated to the outside world, but must instead be copied
// via ReflectionFactory.copyMethod.
private Method[] privateGetDeclaredMethods(boolean publicOnly) {
{- -------------------------------------------
(1) まだ初期化できていなければ, 初期化しておく.
---------------------------------------- -}
checkInitted();
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
Method[] res = null;
{- -------------------------------------------
(1) 結果をキャッシュする設定になっていた場合,
まずキャッシュを調査する. (declaredPublicMethods または declaredMethods)
キャッシュにあればそれをリターンする.
---------------------------------------- -}
if (useCaches) {
clearCachesOnClassRedefinition();
if (publicOnly) {
if (declaredPublicMethods != null) {
res = declaredPublicMethods.get();
}
} else {
if (declaredMethods != null) {
res = declaredMethods.get();
}
}
if (res != null) return res;
}
{- -------------------------------------------
(1) (ここに来るのは, キャッシュに当たらなかったケース)
sun.reflect.Reflection.filterMethods() を呼んで, 対象の Method オブジェクトを取得する.
---------------------------------------- -}
// No cached value available; request value from VM
res = Reflection.filterMethods(this, getDeclaredMethods0(publicOnly));
{- -------------------------------------------
(1) 結果をキャッシュする設定になっていた場合, 結果をキャッシュにセットしておく.
---------------------------------------- -}
if (useCaches) {
if (publicOnly) {
declaredPublicMethods = new SoftReference<>(res);
} else {
declaredMethods = new SoftReference<>(res);
}
}
{- -------------------------------------------
(1) 結果をリターン
---------------------------------------- -}
return res;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.