Код: Выделить всё
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 Я знаю, что мог бы использовать-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