Change private static final field using Java reflectionアンドロイド:Javaのリフレクション
を使用してプライベート静的最終フィールドを変更し、私はJavaのリフレクションを使用してプライベート静的最終フィールドを変更するには、上記のリンクの指示に従いました。私は "データ"という名前のオブジェクトを持っています。 「データ」内には、「タイプ」という名前のプライベート静的最終変数があります。私は "タイプ"をnullに設定したい。 ここに私のコードです。
Field field = data.getClass().getDeclaredField("type");
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(data, null);
これをJava 1.7でも同様のコードで試してみました。しかし、Android上でこのコードを実行すると、次のエラーを生成します。 java.lang.NoSuchFieldExceptionの:修飾子
私が推測する「修飾子は、」Android上Fieldクラスのフィールドではありません。
これを修正するにはどうすればよいですか?
あなたはクラスフィールド_ _runtime._ –
で_modifiersを変更することはできません。そのリンクに従うことができます。 – jas7
Javaコンパイラは、プリミティブな静的最終フィールドの値をインラインで設定できることに注意してください。このような反射魔法をすると、奇妙な行動につながる可能性があります。 – millimoose