2017-01-16 26 views
0

次の行がいつ失敗するのでしょうか?getClassloaderの失敗の理由?

this.getClass()。getClassLoader();

ClassLoaderは常に正しく検出されますか? ClassLoaderが見つからない場合はありますか?

+0

https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getClassLoader() - アクセス権の問題またはこのオブジェクトがプリミティブ型またはvoidを表す場合に失敗します – Dana

+1

「getClassLoader()」(https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getClassLoader--)のjavadoc以降、ドキュメント* "以下の行はいつ失敗するのですか?" * – Andreas

答えて

1

ソースコードを見てください。このメソッドは、SecurityManagerが存在し、アクセスが許可されていない場合にのみSecurityExceptionをスローします。

public ClassLoader getClassLoader() { 
     ClassLoader cl = getClassLoader0(); 
     if (cl == null) 
      return null; 
     SecurityManager sm = System.getSecurityManager(); 
     if (sm != null) { 
      ClassLoader.checkClassLoaderPermission(cl, Reflection.getCallerClass()); 
     } 
     return cl; 
    } 

そして、あなたはclnull何ができるか疑問に思っている場合にはここにはanswerがあります。

+1

ソースコードを見る必要はありません。 'null'値とセキュリティー検査の両方は、[' getClassLoader() '](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html)のjavadocに詳しく記述されています。 #getClassLoader--)。ドキュメンテーションは実際にはより優れています。なぜなら、表示されるソースには何がスローされるのかを正確に示しているからです。また、 'null'値*が何を意味するかについても説明します。 Java APIメソッドに関する情報の最初のソースとして、常にjavadocを使用してください。 – Andreas

関連する問題