Код: Выделить всё
public static void replaceNull(Object obj) {
if (obj == null) {
return;
}
Field[] fields = obj.getClass().getDeclaredFields();
if (fields != null) {
for (Field field : fields) {
field.setAccessible(true);
Class fieldType = field.getType();
try {
if (field.get(obj) == null) {
setDefaultValue(obj, field, fieldType);
}
} catch (IllegalArgumentException e) {
logger.error("failed replacing null :" + e.getMessage(), e);
} catch (IllegalAccessException e) {
logger.error("failed replacing null :" + e.getMessage(), e);
}
}
}
}
private static void setDefaultValue(Object obj, Field field, Class fieldType) throws IllegalAccessException {
if (fieldType == String.class) {
field.set(obj, CommonConstants.BLANK);
} else if (fieldType == Date.class) {
field.set(obj, new Date());
} else if (fieldType == Long.class) {
field.setLong(obj, 0L);
} else if (fieldType == Integer.class) {
field.setInt(obj, 0);
} else if (fieldType == BigDecimal.class) {
field.set(obj, new BigDecimal("0.0"));
}
}
При сканировании с помощью FindBugs программа findbugs сообщила «DP_DO_INSIDE_DO_PRIVILEGED» с этим описанием в setAccessible(true):
Плохая практика — метод вызвал этот должен вызываться только внутри блока doPrivileged
Плагин: findbugs Ключ: DP_DO_INSIDE_DO_PRIVILEGED
Этот код вызывает метод, требующий проверки разрешений безопасности. Если этому коду будут предоставлены разрешения безопасности, но он может быть вызван кодом, у которого нет разрешений безопасности, тогда вызов должен происходить внутри блока doPrivileged.
Мой вопрос, почему это плохо? И как мне это решить?
Подробнее здесь: https://stackoverflow.com/questions/142 ... privileged
Мобильная версия