Top


定義場所(file name)

jdk/src/share/classes/java/lang/Class.java

説明(description)

    // 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.

名前(function name)

    private Method[] privateGetDeclaredMethods(boolean publicOnly) {

本体部(body)

  {- -------------------------------------------
  (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.