So entdeckte ich, wie zu Change private static final field using Java reflection eine Weile zurück und habe es verwendet, um letzte Felder mit Reflexion seitdem zu ändern, jedoch habe ich mich dann gefragt, warum ich nicht die gleiche Logik anwenden konnte zu dem Typ für das Feld. Ich kam mitKann Reflexion den deklarierten Typ eines Feldes ändern
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());
}
}
Doch dies führte mich bis zu fragen, wie diese eine Anwendung bewirken würde, wenn Sie, sagen wir, den Typ für ein Feld Object
gesetzt, wenn es ursprünglich war ein ArrayList
oder eine andere höhere Ebene Klasse. Würde dies zu internen Fehlern innerhalb der JVM führen oder wäre dieser Wert einfach ein Klon der JVM-Daten und hätte sich dies geändert, hätte dies keine Auswirkungen. Jedes Licht, das Sie auf das Thema werfen können, wird sehr geschätzt.
kurze antwort: nein. Es ist nicht möglich, den Typ der Variablen zu ändern, und es ist auch nicht möglich, den Bereich zu ändern (z. B. statisch). –
Nur Instrumentation kann dies tun, wenn die JVM dies unterstützt. Die Mainstream-JVMs unterstützen dies überhaupt nicht. – Holger