gpt4 book ai didi

Java - 运行时反射设置值

转载 作者:行者123 更新时间:2023-12-01 18:49:27 27 4
gpt4 key购买 nike

我尝试为 java bean 中可用的字段设置值,如下所示,并且我想省略静态最终字段:

public Class creatObjectWithDefaultValue(String className) throws IllegalArgumentException, IllegalAccessException {
DefaultParamValues defaultParamValues = null;
Class objectClass = null;
try {
objectClass = Class.forName(className);
Field[] fields = objectClass.getDeclaredFields();

for(Field f:fields){
f.setAccessible(true);
//if(!f.isAccessible()){
// f.setAccessible(true);
Class<?> type = f.getType();


if(! Modifier.isFinal(f.getModifiers()) && type.equals(Integer.class)){
f.set(objectClass, defaultParamValues.INTEGER);
} else if(! Modifier.isFinal(f.getModifiers()) && type.equals(BigInteger.class)){
f.set(objectClass, defaultParamValues.BIGINTEGER);
}/*else if(! Modifier.isFinal(f.getModifiers()) && type.equals(LocalDate.class)){
f.set(objectClass, defaultParamValues.DATE);
}*/else if(! Modifier.isFinal(f.getModifiers()) && type.equals(Boolean.class)){
f.set(objectClass, defaultParamValues.BOOLEAN);
}else if(! Modifier.isFinal(f.getModifiers()) && type.equals(Long.class)){
f.set(objectClass, defaultParamValues.LONGVALUE);
}
f.setAccessible(false);
//}
//To print the value set
if(! Modifier.isFinal(f.getModifiers()) ){
System.out.println(f.get(objectClass));
}

}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return objectClass;
}

当我运行程序时,出现以下异常:完整的堆栈跟踪是:

Exception in thread "main" java.lang.IllegalAccessException: Class com.hexgen.tools.JsonConverter can not access a member of class com.hexgen.ro.request.CreateRequisitionRO with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.reflect.Field.doSecurityCheck(Field.java:960)
at java.lang.reflect.Field.getFieldAccessor(Field.java:896)
at java.lang.reflect.Field.get(Field.java:358)
at com.hexgen.tools.JsonConverter.creatObjectWithDefaultValue(JsonConverter.java:89)
at com.hexgen.tools.JsonConverter.main(JsonConverter.java:181)

问题是什么?有人可以帮我解决这个问题吗?

最诚挚的问候。

最佳答案

您将字段的 accessible 属性恢复为 false,然后继续访问其值。

不必费心将可访问性设置回 false。

关于Java - 运行时反射设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16278486/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com