所以我發現如何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支持,Instrumentation才能執行此操作。主流JVM根本不支持這一點。 – Holger