diff --git a/src/main/java/net/tccn/base/Kv.java b/src/main/java/net/tccn/base/Kv.java index 0f9b707..6cfc555 100644 --- a/src/main/java/net/tccn/base/Kv.java +++ b/src/main/java/net/tccn/base/Kv.java @@ -96,7 +96,10 @@ public class Kv extends LinkedHashMap { private static Predicate isNumber = (t) -> { return t == Integer.class || t == int.class || t == Long.class || t == long.class + || t == float.class || t == Float.class || t == Double.class || t == double.class + || t == Short.class || t == short.class + || t == Byte.class || t == byte.class ; }; @@ -119,9 +122,11 @@ public class Kv extends LinkedHashMap { case "Short": v1 = (short)(long) v; break; case "float": case "Float": v1 = (float)(long) v; break; + case "byte": + case "Byte": v1 = (byte)(long) v; break; default: v1 = v; } - } else if (v.getClass() == Double.class && clazz != Double.class) { + } else if (v.getClass() == Double.class) { if (isNumber.test(clazz)) { switch (clazz.getSimpleName()) { case "long": @@ -132,6 +137,8 @@ public class Kv extends LinkedHashMap { case "Short": v1 = (short)(double) v; break; case "float": case "Float": v1 = (float)(double) v; break; + case "byte": + case "Byte": v1 = (byte)(double) v; break; default: v1 = v; } } else if (clazz == String.class){ @@ -141,7 +148,6 @@ public class Kv extends LinkedHashMap { switch (clazz.getSimpleName()) { case "Date": v1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse((String) v); break; - //string ==> number case "short": case "Short": v1 = (short)Double.parseDouble((String) v); break; case "float": @@ -152,18 +158,32 @@ public class Kv extends LinkedHashMap { case "Long": v1 = (long)Double.parseDouble((String) v); break; case "double": case "Double": v1 = Double.parseDouble((String) v); break; + case "byte": + case "Byte": v1 = Byte.parseByte((String) v); break; default: v1 = v; } } else if (v.getClass() == Integer.class) { switch (clazz.getSimpleName()) { case "long": case "Long": v1 = (long) (int) v; break; - case "int": - case "Integer": v1 = (int) v; break; case "short": case "Short": v1 = (short) (int) v; break; case "float": case "Float": v1 = (float) (int) v; break; + case "byte": + case "Byte": v1 = (byte)(int) v; break; + default: v1 = v; + } + } else if (v.getClass() == Float.class) { + switch (clazz.getSimpleName()) { + case "long": + case "Long": v1 = (long) (float) v; break; + case "int": + case "Integer": v1 = (int) (float)v; break; + case "short": + case "Short": v1 = (short) (float) v; break; + case "byte": + case "Byte": v1 = (byte)(float) v; break; default: v1 = v; } } diff --git a/src/test/java/RunTest.java b/src/test/java/RunTest.java index 4586275..8cc09ad 100644 --- a/src/test/java/RunTest.java +++ b/src/test/java/RunTest.java @@ -176,7 +176,7 @@ public class RunTest { //@Test public void kvTest() { - Map map = new HashMap<>(); + /*Map map = new HashMap<>(); map.put("name", "xxxx"); map.put("age", 12); @@ -186,7 +186,47 @@ public class RunTest { Kv kv = Kv.toKv(user, "name", "abxx=age"); System.out.println(user); - System.out.println(kv); + System.out.println(kv);*/ + Class[] clazzs = { + int.class, long.class, short.class, byte.class, + Integer.class, Long.class, Short.class, Byte.class, float.class, Float.class, + String.class, + }; + Object[] ks = new Object[]{"1", (int)1, (Integer)1, 1l, 1.0, 1f, 1.0d}; + + for (Object k : ks) { + System.out.println("--------------------------------------------"); + for (Class v : clazzs) { + System.out.printf("%s -> %s = ", k.getClass().getSimpleName(), v.getSimpleName()); + + Object o = Kv.toAs(k, v); + switch (v.getSimpleName()) { + case "int": + System.out.println((int)o);break; + case "Integer": + System.out.println((Integer)o);break; + case "long": + System.out.println((long)o);break; + case "Long": + System.out.println((Long)o);break; + case "short": + System.out.println((short)o);break; + case "Short": + System.out.println((Short)o);break; + case "byte": + System.out.println((byte)o);break; + case "float": + System.out.println((float)o);break; + case "Float": + System.out.println((Float)o);break; + case "Byte": + System.out.println((Byte)o);break; + case "String": + System.out.println((String)o);break; + } + } + } + } //@Test