Итак, я обнаружил, как Change private static final field using Java reflection некоторое время назад и использовал его для изменения окончательных полей с отражением с тех пор, однако я тогда задался вопросом, почему я не мог применить ту же логику к типу для поля. Я придумалМожет отражать изменение объявленного типа поля
public static void changeFieldType(Field field, Class newType){
try {
Field typeField = Field.class.getDeclaredField("type");
typeField.setAccessible(true);
typeField.set(field, newType);
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) {
LogUtil.printErr("Failed to edit field type for " + field.getName());
}
}
Однако это привело меня к интересно, как это будет влиять заявление, если вы, скажем, установить тип для поля Object
, когда он был первоначально ArrayList
или какой-либо другой более высокий класс уровень. Будет ли это создавать внутренние ошибки в JVM или это значение просто клон данных JVM и его изменение не повлияет. Любой свет, который вы можете пролить на эту тему, очень ценится.
короткий ответ: нет. невозможно изменить тип переменной, и невозможно изменить ее область действия (например, сделать ее статической) –
Только инструментарий может работать, если JVM поддерживает его. Основные JVM не поддерживают это вообще. – Holger