From a4173984e5eb1919f315dd3ae83fd4630549f9c0 Mon Sep 17 00:00:00 2001 From: aoshiguchen <1052045476@qq.com> Date: Wed, 1 Mar 2023 18:37:14 +0800 Subject: [PATCH] =?UTF-8?q?Kv=E5=B7=A5=E5=85=B7=E7=B1=BB=E5=8F=96=E5=80=BC?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fun/asgc/neutrino/core/base/Kv.java | 103 ++++++++++++++++++ .../fun/asgc/neutrino/core/base/KvTest.java | 27 +++-- 2 files changed, 123 insertions(+), 7 deletions(-) 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 53dd364f..825d9eb4 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 @@ -1,6 +1,8 @@ package fun.asgc.neutrino.core.base; +import fun.asgc.neutrino.core.util.TypeUtil; + import java.io.Serializable; import java.util.*; @@ -35,6 +37,11 @@ public class Kv implements Map , Serializable, Cloneable { return new Kv(parent); } + public Kv set(K k, V v) { + this.put(k, v); + return this; + } + public Kv(Kv parent, int initialCapacity, Locale locale) { this.parent = parent; this._m = new LinkedHashMap(initialCapacity) { @@ -131,6 +138,14 @@ public class Kv implements Map , Serializable, Cloneable { return res; } + public V stackGetOrDefault(K k, V defaultValue) { + V res = this.stackGet(k); + if (null == res) { + res = defaultValue; + } + return res; + } + @Override public V put(K key, V value) { K k = key; @@ -218,4 +233,92 @@ public class Kv implements Map , Serializable, Cloneable { return res; } + // ====== 为了方便取值操作,take开头的方法,全部基于栈式取值 ======= + public V take(K k) { + return this.stackGet(k); + } + + public V take(K k, V defaultValue) { + return this.stackGetOrDefault(k, defaultValue); + } + + public String takeStr(K k) { + return TypeUtil.conversion(take(k), String.class); + } + + public String takeStr(K k, String defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), String.class); + } + + public Byte takeByte(K k) { + return TypeUtil.conversion(take(k), Byte.class); + } + + public Byte takeByte(K k, Byte defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), Byte.class); + } + + public Character takeChar(K k) { + return TypeUtil.conversion(take(k), Character.class); + } + + public Character takeChar(K k, Character defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), Character.class); + } + + public Boolean takeBool(K k) { + return TypeUtil.conversion(take(k), Boolean.class); + } + + public Boolean takeBool(K k, Boolean defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), Boolean.class); + } + + public Short takeShort(K k) { + return TypeUtil.conversion(take(k), Short.class); + } + + public Short takeShort(K k, Short defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), Short.class); + } + + public Integer takeInt(K k) { + return TypeUtil.conversion(take(k), Integer.class); + } + + public Integer takeInt(K k, Integer defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), Integer.class); + } + + public Long takeLong(K k) { + return TypeUtil.conversion(take(k), Long.class); + } + + public Long takeLong(K k, Long defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), Long.class); + } + + public Float takeFloat(K k) { + return TypeUtil.conversion(take(k), Float.class); + } + + public Float takeFloat(K k, Float defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), Float.class); + } + + public Double takeDouble(K k) { + return TypeUtil.conversion(take(k), Double.class); + } + + public Double takeDouble(K k, Double defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), Double.class); + } + + public Date takeDate(K k) { + return TypeUtil.conversion(take(k), Date.class); + } + + public Date takeDate(K k, Date defaultValue) { + return TypeUtil.conversion(take(k, (V)defaultValue), Date.class); + } } 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 2c4dc879..96998051 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 @@ -10,15 +10,18 @@ import org.junit.Test; public class KvTest { @Test public void test1() { - Kv kv1 = Kv.of(); - kv1.put("app.server.http.http-port", 8080); - kv1.put("app.server.http.jks_Path", "/123/456"); + Kv kv1 = Kv.of() + .set("app.server.http.http-port", 8080) + .set("app.server.http.jks_Path", "/123/456") + ; - Kv kv2 = Kv.of(kv1); - kv2.put("app.server.http.httpPort", 8081); - kv2.put("app.server.http.context-path", "/"); - Kv kv3 = Kv.of(kv2); + Kv kv2 = Kv.of(kv1) + .set("app.server.http.httpPort", 8081) + .set("app.server.http.context-path", "/") + ; + + Kv kv3 = Kv.of(kv2); Assert.assertTrue(!kv1.isEmpty()); Assert.assertTrue(kv1.size() == 2); @@ -45,5 +48,15 @@ public class KvTest { Assert.assertTrue(!kv3.isStackEmpty()); Assert.assertTrue(kv3.size() == 0); Assert.assertTrue(kv3.stackSize() == 4); + Assert.assertTrue(kv3.get("app.server.http.jks-path") == null); + Assert.assertTrue(kv3.get("app.server.http.jksPath") == null); + Assert.assertTrue(kv3.get("app.server.http.context-path") == null); + Assert.assertTrue(kv3.stackGet("app.server.http.jks-path").equals("/123/456")); + Assert.assertTrue(kv3.stackGet("app.server.http.jksPath").equals("/123/456")); + Assert.assertTrue(kv3.stackGet("app.server.http.context-path").equals("/")); + + Assert.assertTrue(kv3.stackGetOrDefault("app.server.http.timeout", 60000).equals(60000)); + + Assert.assertTrue(kv3.takeStr("app.server.http.http-port").equals("8081")); } }