Java - значение настройки отражения во время выполнения
Я пытаюсь установить значения для поля, доступного в Java-бине, как показано ниже, и я хочу опустить статические конечные поля:
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)
в чем проблема? Может ли кто-нибудь помочь мне исправить это?
С уважением.
2 ответа
Вы возвращаете accessible
свойство поля для false
и затем вы переходите к его стоимости.
Не беспокойтесь о настройке, доступной обратно в false.
Я думаю, что проблема в том, что вы пытаетесь установить поля в классе, а не в экземпляре этого класса.
Сначала вы должны создать экземпляр вашего objectClass
и установите значения экземпляра!
Вот:
f.set(objectClass, defaultParamValues.INTEGER);
вы передаете объект класса, а не экземпляр этого класса. Проблема возникает, когда ваша программа встречает поле, которое не static
следовательно, ваш Exception
,
Если вы хотите отфильтровать static
поля, которые вы можете использовать:
java.lang.reflect.Modifier.isStatic(field.getModifiers())