feat: 添加默认值处理

Signed-off-by: 502647092 <admin@yumc.pw>
merge/1/MERGE
502647092 2016-10-04 11:03:22 +08:00
parent 1d51ddf7a4
commit 1aa10139a5
1 changed files with 26 additions and 2 deletions

View File

@ -5,6 +5,8 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
@ -79,6 +81,26 @@ public abstract class AbstractInjectConfig {
return config; return config;
} }
/**
*
*
* @param field
*
* @param value
*
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
private void applyDefault(final Field field, Object value) throws IllegalArgumentException, IllegalAccessException {
switch (field.getType().getName()) {
case "java.util.List":
value = new ArrayList<>();
case "java.util.Map":
value = new HashMap<>();
}
field.set(this, value);
}
/** /**
* *
* *
@ -104,7 +126,7 @@ public abstract class AbstractInjectConfig {
case "java.util.List": case "java.util.List":
return config.getList(path); return config.getList(path);
case "java.util.Map": case "java.util.Map":
return config.getConfigurationSection(path).getValues(false); return config.getConfigurationSection(path).getValues(true);
default: default:
return hanldeDefault(type, path, value); return hanldeDefault(type, path, value);
} }
@ -155,6 +177,7 @@ public abstract class AbstractInjectConfig {
* @throws IllegalAccessException * @throws IllegalAccessException
*/ */
private void hanldeValue(final String path, final Field field, Object value) throws IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, NoSuchMethodException, SecurityException, ParseException { private void hanldeValue(final String path, final Field field, Object value) throws IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, NoSuchMethodException, SecurityException, ParseException {
final Object origin = field.get(this);
final Class<?> type = field.getType(); final Class<?> type = field.getType();
if (!type.equals(value.getClass())) { if (!type.equals(value.getClass())) {
value = convertType(type, path, value); value = convertType(type, path, value);
@ -163,7 +186,7 @@ public abstract class AbstractInjectConfig {
value = ChatColor.translateAlternateColorCodes('&', (String) value); value = ChatColor.translateAlternateColorCodes('&', (String) value);
} }
field.set(this, value); field.set(this, value);
Log.d("设置字段 %s 由 %s 为 %s ", field.getName(), origin, value);
} }
/** /**
@ -201,6 +224,7 @@ public abstract class AbstractInjectConfig {
if (value == null) { if (value == null) {
if (field.getAnnotation(Nullable.class) == null) { if (field.getAnnotation(Nullable.class) == null) {
Log.w(PATH_NOT_FOUND, path); Log.w(PATH_NOT_FOUND, path);
applyDefault(field, value);
} }
return; return;
} }