Javaリフレクションを使用してフィールドにブール値を設定できません。 フィールドのデータ型はjava.lang.Booleanです。しかし、データ型がプリミティブ型の場合、つまりブール値の場合は値を設定できます。ここでリフレクションでブール値を設定できません
は、ブール型のプリミティブ型にシンプルVOである:ここでは
public class TestVO {
private Boolean bigBoolean;
private boolean smallBoolean;
}
は私のJavaのリフレクションコードです:
public class TestClass {
public static void main(String args[])
throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
TestVO testVO1 = new TestVO();
Class testVO = testVO1.getClass();
Field smallBooleanField = TestVO.class.getDeclaredField("smallBoolean");
Field bigBooleanField = TestVO.class.getDeclaredField("bigBoolean");
String name1 = smallBooleanField.getName();
System.out.println("SmallBoolean Fieldname is: " + name1);
smallBooleanField.setAccessible(true);
// get the value of this private field
Boolean fieldValue = (Boolean) smallBooleanField.get(testVO1);
System.out.println("fieldValue = " + fieldValue);
smallBooleanField.setAccessible(true);
smallBooleanField.setBoolean(testVO1, true);
// get the value of this private field
fieldValue = (Boolean) smallBooleanField.get(testVO1);
System.out.println("fieldValue = " + fieldValue);
name1 = bigBooleanField.getName();
System.out.println("bigBooleanField Fieldname is: " + name1);
bigBooleanField.setAccessible(true);
// get the value of this private field
fieldValue = (Boolean) bigBooleanField.get(testVO1);
System.out.println("fieldValue = " + fieldValue);
bigBooleanField.setAccessible(true);
bigBooleanField.setBoolean(testVO1, new Boolean(true));
// get the value of this private field
fieldValue = (Boolean) bigBooleanField.get(testVO1);
System.out.println("fieldValue = " + fieldValue);
}
}
出力は次のとおりです。
SmallBooleanフィールド名は次のとおりです。smallBoolean fieldValue = false fieldValue = true bigBooleanFieldフィールド名:bigBooleanスレッド "メイン" java.lang.IllegalArgumentExceptionがでfieldValueの= nullを 例外:sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)で(論理値)true にjava.lang.BooleanのフィールドTestVO.bigBooleanを設定できませんjava.lang.reflect.Field.setBooleanでsun.reflect.UnsafeObjectFieldAccessorImpl.setBoolean(UnsafeObjectFieldAccessorImpl.java:90) (Field.java:795)でsun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:175) でiが設定しようTestClass.main(TestClass.java:44)
で 新しいBoolean(true)、Boolean.TRUE、trueなどのbigBoolean値は機能しません。助けてください。
詳細な回答と解決策をお寄せいただきありがとうございます。 +1。 –