我無法使用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 fieldName的是:smallBoolean fieldValue = false fieldValue = true bigBooleanField Fieldname is:bigBoolean fieldValue方法= NULL 異常在線程 「主」 java.lang.IllegalArgumentException異常:不能sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)設置一個java.lang.Boolean場TestVO.bigBoolean到(布爾)真 在sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:175) 在sun.reflect.UnsafeObjectFieldAccessorImpl.setBoolean(UnsafeObjectFieldAccessorImpl.java:90) 在java.lang.reflect.Field.setBoolean(Field.java:795) 在TestClass.main(TestClass.java:44)
我試圖設置用new Boolean(true),Boolean.TRUE,true等的bigBoolean值無效。請幫忙。
感謝您的詳細解答和解決方案。 +1。 –