我是靠谱客的博主 怡然镜子,最近开发中收集的这篇文章主要介绍解决:java.lang.IllegalArgumentException: Can not set java.lang.Boolean field,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
问题场景
使用反射为Boolean类型变量赋值时,调用 java.lang.reflect.Field#setBoolean
报错
public class SetBooleanDemo {
public static void main(String[] args) throws IllegalAccessException {
BooleanObj obj = new BooleanObj();
Class<? extends BooleanObj> booleanClass = obj.getClass();
for (Field declaredField : booleanClass.getDeclaredFields()) {
declaredField.setAccessible(true);
declaredField.setBoolean(obj,Boolean.TRUE);
}
System.out.println(obj);
}
@Data
public static class BooleanObj{
private boolean bool1;
private Boolean bool2;
}
}
Exception in thread "main" java.lang.IllegalArgumentException: Can not set java.lang.Boolean field com.example.demo.reflect.SetBooleanDemo$BooleanObj.bool2 to (boolean)true
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:175)
at sun.reflect.UnsafeObjectFieldAccessorImpl.setBoolean(UnsafeObjectFieldAccessorImpl.java:90)
at java.lang.reflect.Field.setBoolean(Field.java:801)
at com.example.demo.reflect.SetBooleanDemo.main(SetBooleanDemo.java:20)
无论切换成 declaredField.setBoolean(obj,Boolean.TRUE)
还是 declaredField.setBoolean(obj,Boolean.TRUE.booleanValue())
都未能解决
本来是个小问题,但是搜了下博客都是答非所问
解决方式
使用 java.lang.reflect.Field#set
即可
public class SetBooleanDemo {
public static void main(String[] args) throws IllegalAccessException {
BooleanObj obj = new BooleanObj();
Class<? extends BooleanObj> booleanClass = obj.getClass();
for (Field declaredField : booleanClass.getDeclaredFields()) {
declaredField.setAccessible(true);
declaredField.set(obj,Boolean.TRUE);
}
System.out.println(obj);
}
@Data
public static class BooleanObj{
private boolean bool1;
private Boolean bool2;
}
}
延伸类比包装类型字短适用 setXXX方法都可能出现此问题,直接使用set 方法即可
END
最后
以上就是怡然镜子为你收集整理的解决:java.lang.IllegalArgumentException: Can not set java.lang.Boolean field的全部内容,希望文章能够帮你解决解决:java.lang.IllegalArgumentException: Can not set java.lang.Boolean field所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复