diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/Kv.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/Kv.java index 50b737ed..1fdc9df2 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/Kv.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/Kv.java @@ -22,6 +22,7 @@ import java.util.*; * @date: 2023/3/1 */ public class Kv implements Map , Serializable, Cloneable { + private HashMap aliasMap; private LinkedHashMap _m; private HashMap _k; private Locale locale; @@ -49,6 +50,11 @@ public class Kv implements Map , Serializable, Cloneable { return this; } + public Kv setAlias(K k, K alias) { + this.aliasMap.put(convertKey(alias), k); + return this; + } + public Kv(Kv parent, int initialCapacity, Locale locale) { this.parent = parent; this._m = new LinkedHashMap(initialCapacity) { @@ -71,6 +77,7 @@ public class Kv implements Map , Serializable, Cloneable { } }; this._k = new HashMap<>(initialCapacity); + this.aliasMap = new HashMap<>(initialCapacity); this.locale = (locale != null ? locale : Locale.getDefault()); } @@ -207,6 +214,16 @@ public class Kv implements Map , Serializable, Cloneable { return key.toLowerCase(getLocale()).replaceAll(SEPARATOR, ""); } + protected K convertKey(Object k) { + K res = null; + try { + res = (K) convertKey((String) k); + } catch (Exception e) { + res = (K)k; + } + return res; + } + protected boolean removeEldestEntry(Map.Entry eldest) { return false; } @@ -219,6 +236,7 @@ public class Kv implements Map , Serializable, Cloneable { } res._m = (LinkedHashMap) _m.clone(); res._k = (HashMap) _k.clone(); + res.aliasMap = (HashMap) aliasMap.clone(); res.locale = locale; return res; } @@ -226,9 +244,11 @@ public class Kv implements Map , Serializable, Cloneable { // ====== 为了方便取值操作,get方法保持Map接口原有语义,不支持栈式取值 ======= @Override public V get(Object key) { - K k = null; + K k = this.aliasMap.get(convertKey(key)); try { - k = (K) key; + if (null == k) { + k = (K) key; + } } catch (Exception e) { return null; } diff --git a/neutrino-core/src/test/java/fun/asgc/neutrino/core/base/KvTest.java b/neutrino-core/src/test/java/fun/asgc/neutrino/core/base/KvTest.java index ec693085..c3ad5d72 100644 --- a/neutrino-core/src/test/java/fun/asgc/neutrino/core/base/KvTest.java +++ b/neutrino-core/src/test/java/fun/asgc/neutrino/core/base/KvTest.java @@ -13,6 +13,7 @@ public class KvTest { Kv kv1 = Kv.of() .set("app.server.http.http-port", 8080) .set("app.server.http.jks_Path", "/123/456") + .setAlias("app.server.http.http-port", "http-port") ; @@ -60,5 +61,8 @@ public class KvTest { Assert.assertTrue(kv3.stackGetOrDefault("app.server.http.timeout", 60000).equals(60000)); Assert.assertTrue(kv3.takeStr("app.server.http.http-port").equals("8081")); + Assert.assertTrue(kv3.takeStr("httpPort").equals("8080")); + Assert.assertTrue(kv3.takeInt("http-port").equals(8080)); + } }