Browse Source

优化类型

zhouhao 2 years ago
parent
commit
a8595c9aec

+ 56 - 0
jetlinks-components/common-component/src/main/java/org/jetlinks/community/PropertyConstants.java

@@ -1,10 +1,13 @@
 package org.jetlinks.community;
 
+import lombok.Generated;
 import org.jetlinks.core.config.ConfigKey;
 import org.jetlinks.core.message.HeaderKey;
 
+import java.lang.reflect.Type;
 import java.util.Map;
 import java.util.Optional;
+import java.util.function.Supplier;
 
 /**
  * @author wangzheng
@@ -24,8 +27,14 @@ public interface PropertyConstants {
         return Optional.ofNullable((T) map.get(key.getKey()));
     }
 
+    @Generated
     interface Key<V> extends ConfigKey<V>, HeaderKey<V> {
 
+        @Override
+        default Type getValueType() {
+            return ConfigKey.super.getValueType();
+        }
+
         @Override
         default Class<V> getType() {
             return ConfigKey.super.getType();
@@ -45,5 +54,52 @@ public interface PropertyConstants {
             };
         }
 
+        static <T> Key<T> of(String key, T defaultValue) {
+            return new Key<T>() {
+                @Override
+                public String getKey() {
+                    return key;
+                }
+
+                @Override
+                public T getDefaultValue() {
+                    return defaultValue;
+                }
+            };
+        }
+
+        static <T> Key<T> of(String key, Supplier<T> defaultValue) {
+            return new Key<T>() {
+                @Override
+                public String getKey() {
+                    return key;
+                }
+
+                @Override
+                public T getDefaultValue() {
+                    return defaultValue.get();
+                }
+            };
+        }
+
+        static <T> Key<T> of(String key, Supplier<T> defaultValue, Type type) {
+            return new Key<T>() {
+                @Override
+                public Type getValueType() {
+                    return type;
+                }
+
+                @Override
+                public String getKey() {
+                    return key;
+                }
+
+                @Override
+                public T getDefaultValue() {
+                    return defaultValue.get();
+                }
+            };
+        }
+
     }
 }