diff --git a/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java b/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java index 54444bc..6fee3e0 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java @@ -9,6 +9,13 @@ import org.jetbrains.annotations.Nullable; import java.lang.reflect.Field; +/** + * 配置文件类初始化方法 + * 用于初始化 {@link ConfigurationRoot} 中的每个 {@link ConfigValue} 对象 + * + * @param {@link ConfigurationProvider} 配置文件的数据来源 + * @author CarmJos + */ public class ConfigInitializer> { protected final @NotNull T provider; @@ -17,13 +24,37 @@ public class ConfigInitializer> { this.provider = provider; } + /** + * 初始化指定类以及其子类的所有 {@link ConfigValue} 对象。 + * + * @param clazz 配置文件类,须继承于 {@link ConfigurationRoot} 。 + * @param saveDefaults 是否写入默认值(默认为 true)。 + */ public void initialize(@NotNull Class clazz, boolean saveDefaults) { initialize(clazz, saveDefaults, true); } + /** + * 初始化指定类的所有 {@link ConfigValue} 对象。 + * + * @param clazz 配置文件类,须继承于 {@link ConfigurationRoot} 。 + * @param saveDefaults 是否写入默认值(默认为 true)。 + * @param loadSubClasses 是否加载内部子类(默认为 true)。 + */ public void initialize(@NotNull Class clazz, boolean saveDefaults, boolean loadSubClasses) { - initializeClass(clazz, null, null, null, null, saveDefaults, loadSubClasses); + initializeClass( + clazz, null, + null, null, null, + saveDefaults, loadSubClasses + ); + if (saveDefaults) { + try { + provider.save(); + } catch (Exception e) { + e.printStackTrace(); + } + } } protected void initializeClass(@NotNull Class clazz, diff --git a/core/src/main/java/cc/carm/lib/configuration/core/ConfigurationRoot.java b/core/src/main/java/cc/carm/lib/configuration/core/ConfigurationRoot.java index 3c8a908..687e067 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/ConfigurationRoot.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/ConfigurationRoot.java @@ -1,4 +1,7 @@ package cc.carm.lib.configuration.core; +/** + * 配置文件类的根节点,用于标注该类用于记录配置文件中的配置信息。 + */ public abstract class ConfigurationRoot { } diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java b/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java index 7bd8928..6ebfe37 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java @@ -45,12 +45,29 @@ public abstract class ConfigValue { this.defaultValue = defaultValue; } + /** + * 得到该配置的设定值(即读取到的值)。 + *
若初始化时未写入默认值,则可以通过 {@link #getOrDefault()} 方法在该设定值为空时获取默认值。 + * + * @return 设定值 + */ public abstract @Nullable T get(); + /** + * 得到该配置的设定值,若不存在,则返回默认值。 + * + * @return 设定值或默认值 + */ public @Nullable T getOrDefault() { - return Optional.ofNullable(get()).orElse(getDefaultValue()); + return getOptional().orElse(getDefaultValue()); } + /** + * 得到该配置的非空值。 + * + * @return 非空值 + * @throws NullPointerException 对应数据为空时抛出 + */ public @NotNull T getNotNull() { return Objects.requireNonNull(getOrDefault(), "Value(" + configPath + ") is null."); } @@ -59,12 +76,28 @@ public abstract class ConfigValue { return Optional.ofNullable(get()); } + /** + * 设定该配置的值。 + *
设定后,不会自动保存配置文件;若需要保存,请调用 {@link ConfigurationProvider#save()} 方法。 + * + * @param value 配置的值 + */ public abstract void set(@Nullable T value); + /** + * 初始化该配置的默认值。 + *
设定后,不会自动保存配置文件;若需要保存,请调用 {@link ConfigurationProvider#save()} 方法。 + */ public void setDefault() { setDefault(false); } + /** + * 将该配置的值设置为默认值。 + *
设定后,不会自动保存配置文件;若需要保存,请调用 {@link ConfigurationProvider#save()} 方法。 + * + * @param override 是否覆盖已设定的值 + */ public void setDefault(boolean override) { if (!override && getConfiguration().contains(getConfigPath())) return; Optional.ofNullable(getDefaultValue()).ifPresent(this::set); diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredValue.java b/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredValue.java index 6ca5a3a..4dea911 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredValue.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredValue.java @@ -52,7 +52,7 @@ public class ConfiguredValue extends CachedConfigValue { @Override public V get() { if (isExpired()) { // 已过时的数据,需要重新解析一次。 - Object value = getConfiguration().get(getConfigPath()); + Object value = getValue(); if (value == null) return useDefault(); // 获取的值不存在,直接使用默认值。 try { // 若未出现错误,则直接更新缓存并返回。