Как получить доступ к внутренним полевым сборам Java в Java 17?JAVA

Программисты JAVA общаются здесь
Anonymous
Как получить доступ к внутренним полевым сборам Java в Java 17?

Сообщение Anonymous »

Я застрял, пытаясь очистить частный статический окончательный набор в сторонней библиотеке (Restlet), используя отражение. Поле выглядит так: < /p>

Код: Выделить всё

private static final Set STANDARD_HEADERS = Collections
.unmodifiableSet(new CaseInsensitiveHashSet(Arrays.asList(...)));
< /code>
Мой план состоял в том, чтобы получить коллекцию поддержки изнутри немодиажируемой обертки и очистить ее. Вот что я попробовал: < /p>
public static void clearStandardHeaders() {
try {
Class utils = Class.forName("org.restlet.engine.header.HeaderUtils");
Field stdField = utils.getDeclaredField("STANDARD_HEADERS");
stdField.setAccessible(true);

@SuppressWarnings("unchecked")
Set originalSet = (Set) stdField.get(null);

// This is where it breaks
Field backingField = originalSet.getClass().getSuperclass().getDeclaredField("c");
backingField.setAccessible(true);  // 
ошибка, которую я получаю,: < /p>

Java.lang.reflect.inaccessebleObjectException: невозможно создать поле
final java.util.collection
Java.base не «открывает java.util» для безымянного модуля @11a8c40

Я вижу, что поле существует, когда я отладко - это находит java.util.collections $ undodifiablecolection 
и code> field jut.collection и code> field. Затем терпит неудачу в setAccessible (true) .
Я знаю, что мог бы использовать-add-opens java.base/java.util = all-unnamed , но это не вариант для производства. Окончательная банка должна работать с Java -Jar app.jar .
уже попробовал:
Различные имена поля, если я понял это неправильно

Код: Выделить всё

sun.misc.Unsafe
(также заблокирован)
Изменение окончательного модификатора (не работает в Java 12+)
Часть отражения работает нормально - это просто модульная система, блокирующая меня на последнем шаге. Или мне совершенно не повезло с модульной системой Java 17?

Подробнее здесь: https://stackoverflow.com/questions/796 ... in-java-17

Вернуться в «JAVA»