2016-04-09 8 views
3

У меня есть следующий код, чтобы восстановить значения по умолчанию URLStreamHandlers для HTTP и HTTPS, который работает в Java 8, доступ к статическому пакету области действие методы URL.getURLStreamHandler():Можно ли получить доступ к методам с охватом пакетов путем отражения в Java 9 с помощью Jigsaw?

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 с jigsaw или будет модифицирующим видимость таким образом запрещена?

+0

Возможность доступа к ним через переопределение доступа может существовать, но поскольку частные методы пакета не являются частью официального API, нет никакой гарантии, что метод будет существовать вообще ... – Holger

ответ

4

Раньше это было возможно в раннем прототипе, но его больше нет. Правила доступности Jigsaw теперь ограничивают доступ только к public элементам (типам, методам, полям).

В вашем примере вызов method.setAccessible(true) будет выпадать с сообщением, подобное этому:

java.lang.reflect.InaccessibleObjectException: Не удается сделать getURLStreamHandler доступным: модуль Java .... не " открывает java .... "на неназванный модуль @ 1941a8ff

См. this question, как это работает.

 Смежные вопросы

  • Нет связанных вопросов^_^