diff --git a/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java b/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java
index fa48e9b..25fee49 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java
@@ -8,26 +8,26 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * 用于标记对应类或参数的配置路径
+ * The configuration path used to mark the corresponding class or parameter.
*/
@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ConfigPath {
/**
- * 指定路径的值。
- * 若不指定,则会通过 {@link ConfigInitializer#getPathFromName(String)} 自动生成当前路径的值。
+ * The path value of the current configuration.
+ * If not set,will generate the path by {@link ConfigInitializer#getPathFromName(String)}.
*
- * @return 路径的值
+ * @return The path value of the current configuration
*/
String value() default "";
/**
- * 是否从根节点开始。
- * 若为 false,则会自动添加上一个路径(如果有)到本节点的路径。
- * 若为 true,则会从根节点开始直接设置本路径。
+ * Whether to start with the root node.
+ * If false, the previous path (if any) to the node is automatically added.
+ * If true, the path will be set directly from the root node.
*
- * @return 是否不继承上一路径,直接从根路径为开始
+ * @return Whether to start directly from the root path without inheriting the previous path
*/
boolean root() default false;
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java b/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java
index 04702e2..2089a46 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java
@@ -8,11 +8,12 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * 顶部注释,用于给对应配置的顶部添加注释,便于使用者阅读查看。
- *
如:
+ * Header Comments.
+ * Add a comment to the top of the corresponding configuration for easy reading and viewing.
+ *
e.g.
*
- * # 注释第一行
- * # 注释第二行
+ * # The first line of the comment
+ * # The second line of the comment
* foo: "bar"
*
*/
@@ -21,9 +22,9 @@ import java.lang.annotation.Target;
public @interface HeaderComment {
/**
- * 注释内容,若内容长度为0则会视为一个空行。
- * 如 {"foo","","bar"}
- * 会被添加为
+ * If the content of the note is 0, it will be treated as a blank line.
+ *
e.g. {"foo","","bar"}
+ * Will be set as
*
* # foo
*
@@ -31,7 +32,7 @@ public @interface HeaderComment {
* foo: "bar"
*
*
- * @return 注释内容
+ * @return The content of this comment
*/
@NotNull
String[] value() default "";
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java b/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java
index 94a4ae6..1d3a750 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java
@@ -8,10 +8,11 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * 行内注释,用于给对应配置的所在行添加注释,便于使用者阅读查看。
- * 如:
+ * Inline comments,
+ * add comments to the rows of the corresponding configurations for easy reading and viewing.
+ * e.g.
*
- * foo: "bar" # 注释内容
+ * foo: "bar" # Comment Contents
*
*/
@Target({ElementType.FIELD})
@@ -19,13 +20,13 @@ import java.lang.annotation.Target;
public @interface InlineComment {
/**
- * 注释内容,若内容长度为0则不会添加注释
- * 如 "foobar" 将被设定为
+ * If the content length is 0, the comment will not be added.
+ *
e.g. "foobar" will be set
*
* foo: "bar" # foobar
*
*
- * @return 注释内容
+ * @return The content of this comment
*/
@NotNull
String value() default "";
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java
index 7cfea9f..eef1122 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java
@@ -1,8 +1,8 @@
package cc.carm.lib.configuration.core.builder;
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
-import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.ConfigValue;
+import cc.carm.lib.configuration.core.value.ValueManifest;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -22,7 +22,7 @@ public abstract class AbstractConfigBuilder providerClass) {
+ protected AbstractConfigBuilder(Class super P> providerClass) {
this.providerClass = providerClass;
}
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java
index 427340d..941fdcd 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java
@@ -5,7 +5,7 @@ import cc.carm.lib.configuration.core.source.ConfigurationProvider;
public abstract class CommonConfigBuilder>
extends AbstractConfigBuilder> {
- public CommonConfigBuilder() {
+ protected CommonConfigBuilder() {
super(ConfigurationProvider.class);
}
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/function/ConfigValueParser.java b/core/src/main/java/cc/carm/lib/configuration/core/function/ConfigValueParser.java
index 8d3989d..7dc7762 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/function/ConfigValueParser.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/function/ConfigValueParser.java
@@ -50,22 +50,9 @@ public interface ConfigValueParser {
@Contract(pure = true)
static @NotNull ConfigValueParser castObject(Class valueClass) {
- return (input, defaultValue) -> {
- if (Number.class.isAssignableFrom(valueClass)) {
- if (Long.class.isAssignableFrom(valueClass) || long.class.isAssignableFrom(valueClass)) {
- input = longValue().parse(input, (Long) defaultValue);
- } else if (Integer.class.isAssignableFrom(valueClass) || int.class.isAssignableFrom(valueClass)) {
- input = intValue().parse(input, (Integer) defaultValue);
- } else if (Float.class.isAssignableFrom(valueClass) || float.class.isAssignableFrom(valueClass)) {
- input = floatValue().parse(input, (Float) defaultValue);
- } else if (Double.class.isAssignableFrom(valueClass) || double.class.isAssignableFrom(valueClass)) {
- input = doubleValue().parse(input, (Double) defaultValue);
- } else if (Byte.class.isAssignableFrom(valueClass) || byte.class.isAssignableFrom(valueClass)) {
- input = byteValue().parse(input, (Byte) defaultValue);
- } else if (Short.class.isAssignableFrom(valueClass) || short.class.isAssignableFrom(valueClass)) {
- input = shortValue().parse(input, (Short) defaultValue);
- }
- } else if (Boolean.class.isAssignableFrom(valueClass) || boolean.class.isAssignableFrom(valueClass)) {
+ if (Number.class.isAssignableFrom(valueClass)) return castNumber(valueClass);
+ else return (input, defaultValue) -> {
+ if (Boolean.class.isAssignableFrom(valueClass) || boolean.class.isAssignableFrom(valueClass)) {
input = booleanValue().parse(input, (Boolean) defaultValue);
} else if (Enum.class.isAssignableFrom(valueClass) && input instanceof String) {
String enumName = (String) input;
@@ -79,6 +66,28 @@ public interface ConfigValueParser {
};
}
+
+ @Contract(pure = true)
+ static @NotNull ConfigValueParser castNumber(Class valueClass) {
+ return (input, defaultValue) -> {
+ if (Long.class.isAssignableFrom(valueClass) || long.class.isAssignableFrom(valueClass)) {
+ input = longValue().parse(input, (Long) defaultValue);
+ } else if (Integer.class.isAssignableFrom(valueClass) || int.class.isAssignableFrom(valueClass)) {
+ input = intValue().parse(input, (Integer) defaultValue);
+ } else if (Float.class.isAssignableFrom(valueClass) || float.class.isAssignableFrom(valueClass)) {
+ input = floatValue().parse(input, (Float) defaultValue);
+ } else if (Double.class.isAssignableFrom(valueClass) || double.class.isAssignableFrom(valueClass)) {
+ input = doubleValue().parse(input, (Double) defaultValue);
+ } else if (Byte.class.isAssignableFrom(valueClass) || byte.class.isAssignableFrom(valueClass)) {
+ input = byteValue().parse(input, (Byte) defaultValue);
+ } else if (Short.class.isAssignableFrom(valueClass) || short.class.isAssignableFrom(valueClass)) {
+ input = shortValue().parse(input, (Short) defaultValue);
+ }
+ if (valueClass.isInstance(input)) return valueClass.cast(input);
+ else throw new IllegalArgumentException("Cannot cast value to " + valueClass.getName());
+ };
+ }
+
@Contract(pure = true)
static @NotNull ConfigValueParser parseString(Class valueClass) {
return (input, defaultValue) -> {
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 5d9a045..f8028ca 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
@@ -20,12 +20,12 @@ public abstract class ConfigValue extends ValueManifest {
}
/**
- * @param provider 配置文件提供者
- * @param configPath 配置路径
- * @param headerComments 头部注释内容
- * @param inlineComments 行内注释内容
- * @param defaultValue 默认参数值
- * @deprecated 请使用 {@link #ConfigValue(ValueManifest)} 构造器。
+ * @param provider Provider of config files {@link ConfigurationProvider}
+ * @param configPath Config path of this value
+ * @param headerComments Header comment contents
+ * @param inlineComments Inline comment contents
+ * @param defaultValue The default value
+ * @deprecated Please use {@link #ConfigValue(ValueManifest)} instead.
*/
@Deprecated
protected ConfigValue(@Nullable ConfigurationProvider> provider, @Nullable String configPath,
@@ -104,11 +104,7 @@ public abstract class ConfigValue extends ValueManifest {
* @return 获取当前值是否为默认值。
*/
public boolean isDefault() {
- T defaultValue = getDefaultValue();
- T value = get();
- if (defaultValue == null && value == null) return true;
- else if (defaultValue != null && value != null) return defaultValue.equals(value);
- else return false;
+ return Objects.equals(getDefaultValue(), get());
}
}
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java b/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java
index f0f210c..cde0cc2 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java
@@ -11,9 +11,10 @@ import java.util.List;
import java.util.Optional;
/**
- * 配置值描述清单。用于描述一个配置值的相关基础信息。
+ * ConfigValue Manifests.
+ * The basic information that describes a configuration value.
*
- * @param 配置值类型
+ * @param Value type
* @author CarmJos
*/
public class ValueManifest {
@@ -38,11 +39,11 @@ public class ValueManifest {
protected @Nullable T defaultValue;
/**
- * @param provider 配置文件提供者
- * @param configPath 配置路径
- * @param headerComments 头部注释内容
- * @param inlineComment 行内注释内容
- * @param defaultValue 默认参数值
+ * @param provider Provider of config files {@link ConfigurationProvider}
+ * @param configPath Config path of this value
+ * @param headerComments Header comment contents
+ * @param inlineComment Inline comment content
+ * @param defaultValue The default value
*/
public ValueManifest(@Nullable ConfigurationProvider> provider, @Nullable String configPath,
@Nullable List headerComments, @Nullable String inlineComment,
@@ -55,12 +56,12 @@ public class ValueManifest {
}
/**
- * 此方法提供给 {@link ConfigInitializer},以便对配置值的相关信息进行统一初始化操作。
+ * The initialize method for {@link ConfigInitializer}, which is used to initialize the value.
*
- * @param provider 配置文件提供者
- * @param configPath 配置路径
- * @param headerComments 头部注释内容
- * @param inlineComment 行内注释内容
+ * @param provider Provider of config files {@link ConfigurationProvider}
+ * @param configPath Config path of this value
+ * @param headerComments Header comment contents
+ * @param inlineComment Inline comment content
*/
protected void initialize(@NotNull ConfigurationProvider> provider, @NotNull String configPath,
@Nullable List headerComments, @Nullable String inlineComment) {