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

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

Сообщение Anonymous »

Вопрос
Как я могу очистить частный статический окончательный набор обернутый сбором. Jvm-args)?
Проблема
Я пытаюсь очистить частный статический окончательный набор standard_headers в библиотеке третьей стороны (Restlet), используя отражение. Поле определено как: < /p>

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

private static final Set STANDARD_HEADERS = Collections
.unmodifiableSet(new CaseInsensitiveHashSet(Arrays.asList(...)));

Мой подход состоит в том, чтобы получить доступ к коллекции поддержки внутри коллекций.

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

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

// Try to access the backing collection
Field backingField = originalSet.getClass().getSuperclass().getDeclaredField("c");
backingField.setAccessible(true);  // 
 ошибка < /h2>
java.lang.reflect.InaccessibleObjectException: Unable to make field final java.util.Collection java.util.Collections$UnmodifiableCollection.c accessible: module java.base does not "opens java.util" to unnamed module @11a8c40

< /code>
 debug output < /h2>
Отражение успешно находит структуру поля: < /p>
[list]
[*] Класс: java.util.collections $ unmodifiableset < /code> < /li>
superclass: java.util.collections $ unmodifiablecollection 
[*] Поле: C: Java.Util.collection (Модификаторы: 16)
[/list]
, но не удается при попытке сделать это доступным из -за системных ограничений.

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

Unmodifiable set class: java.util.Collections$UnmodifiableSet
Available fields in java.util.Collections$UnmodifiableSet:
serialVersionUID : long (modifiers: 26)
Superclass fields in java.util.Collections$UnmodifiableCollection:
serialVersionUID : long (modifiers: 26)
c : java.util.Collection (modifiers: 16)
Found field 'c' in superclass java.util.Collections$UnmodifiableCollection
Using backing field: c of type java.util.Collection
Warning: Could not clear STANDARD_HEADERS due to Java module restrictions.
Maven Configuration
Я попытался добавить добавление-add-opens в плагин Maven Exec:



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

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