Change private static final field using Java reflectionする方法を発見しました。それ以来、リフレクトで最終フィールドを変更するために使用していますが、なぜ同じロジックを適用できないのか疑問に思っていますフィールドの型に変換します。私は、しかし、これはそれが元々ArrayList
または他のいくつかのより高いレベルのクラスだったときに、たとえば、Object
にフィールドのタイプを設定した場合、これはアプリケーションに影響を与えるだろうか疑問に私を導いたリフレクトでフィールドの宣言された型を変更することができます
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());
}
}
を思い付きました。 JVM内で内部エラーが発生するか、この値が単にJVMのデータのクローンであり、それを変更しても効果はありません。被験者に出すことのできる光は大変ありがたいです。
短い回答:いいえ。変数のタイプを変更することはできません。また、スコープを変更することもできません(例えば静的にする)。 –
JVMがサポートしている場合、インストルメンテーションでしか実行できません。主流のJVMはこれをまったくサポートしていません。 – Holger