4

URLStreamHandlers静的パッケージスコープメソッドにアクセスすることにより、Java 8 で動作する http および httpsのデフォルトを取得する次のコードがありますURL.getURLStreamHandler()

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;
    }
}

Java 9 でもジグソーでこれは可能ですか、それともこの方法で可視性を変更することは禁止されますか?

4

1 に答える 1

4

初期のプロトタイプでは可能でしたが、現在は不可能です。publicJigsaw のアクセシビリティ ルールは、要素 (型、メソッド、フィールド)へのアクセスのみを制限するようになりました。

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

java.lang.reflect.InaccessibleObjectException: getURLStreamHandler をアクセス可能にできません: モジュール java.... は、名前のないモジュール @1941a8ff に対して「java.... を開きません」

それを回避する方法については、この質問を参照してください。

于 2016-04-09T13:15:36.567 に答える