2016-04-09 4 views
3

私は静的パッケージスコープ法URL.getURLStreamHandler()アクセスすることにより、Java 8で動作し、次のHTTPのデフォルトURLStreamHandlersを取得するためのコードとhttpsありますJigsawでJava 9でリフレクトすることで、パッケージスコープのメソッドにアクセスできますか?

private URLStreamHandler getURLStreamHandler(String protocol) { 
    try { 
     Method method = URL.class.getDeclaredMethod("getURLStreamHandler", String.class); 
     method.setAccessible(true); 
     return (URLStreamHandler) method.invoke(null, protocol); 
    } catch (Exception e) { 
     logger.warning("could not access URL.getUrlStreamHandler"); 
     return null; 
    } 
} 

が、これはまだjigsawてJava 9に可能だろうか、変更しますこのような可視性は禁止されていますか?

+0

アクセスオーバーライドでアクセスできる可能性はありますが、パッケージプライベートメソッドは公式APIの一部ではないため、メソッドが存在する保証はありません。 – Holger

答えて

4

初期のプロトタイプでは可能でしたが、もはやそれはありません。ジグソーのアクセシビリティルールでは、要素(型、メソッド、フィールド)のみのアクセスが制限されるようになりました。

method.setAccessible(true)への呼び出しは、このようなメッセージで失敗しますあなたの例では:

java.lang.reflect.InaccessibleObjectException:getURLStreamHandlerアクセス​​可能にすることができません:モジュールのJava ....んではありません」 Javaを開く.... "という名前のモジュールに@ 1941a8ff

これを回避する方法については、this questionを参照してください。

関連する問題