Skip to content

Commit 625c270

Browse files
committed
Update BeanAdapter.
1 parent 204838b commit 625c270

3 files changed

Lines changed: 12 additions & 19 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
subprojects {
1616
group = 'org.httprpc'
17-
version = '6.4.3'
17+
version = '6.4.4'
1818

1919
repositories {
2020
mavenCentral()

kilo-client/src/main/java/org/httprpc/kilo/beans/BeanAdapter.java

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.lang.reflect.ParameterizedType;
2828
import java.lang.reflect.Proxy;
2929
import java.lang.reflect.Type;
30+
import java.math.BigDecimal;
3031
import java.net.URI;
3132
import java.net.URL;
3233
import java.nio.file.Path;
@@ -764,50 +765,38 @@ private static Object toRawType(Object value, Class<?> type) {
764765
} else if (type == Byte.TYPE || type == Byte.class) {
765766
if (value == null) {
766767
return (type == Byte.TYPE) ? (byte)0 : null;
767-
} else if (value instanceof Number number) {
768-
return number.byteValue();
769768
} else {
770-
return Byte.parseByte(value.toString());
769+
return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).byteValue();
771770
}
772771
} else if (type == Short.TYPE || type == Short.class) {
773772
if (value == null) {
774773
return (type == Short.TYPE) ? (short)0 : null;
775-
} else if (value instanceof Number number) {
776-
return number.shortValue();
777774
} else {
778-
return Short.parseShort(value.toString());
775+
return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).shortValue();
779776
}
780777
} else if (type == Integer.TYPE || type == Integer.class) {
781778
if (value == null) {
782779
return (type == Integer.TYPE) ? 0 : null;
783-
} else if (value instanceof Number number) {
784-
return number.intValue();
785780
} else {
786-
return Integer.parseInt(value.toString());
781+
return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).intValue();
787782
}
788783
} else if (type == Long.TYPE || type == Long.class) {
789784
if (value == null) {
790785
return (type == Long.TYPE) ? 0L : null;
791-
} else if (value instanceof Number number) {
792-
return number.longValue();
793786
} else {
794-
return Long.parseLong(value.toString());
787+
return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).longValue();
795788
}
796789
} else if (type == Float.TYPE || type == Float.class) {
797790
if (value == null) {
798791
return (type == Float.TYPE) ? 0.0f : null;
799-
} else if (value instanceof Number number) {
800-
return number.floatValue();
801792
} else {
802-
return Float.parseFloat(value.toString());
793+
return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).floatValue();
803794
}
804795
} else if (type == Double.TYPE || type == Double.class) {
805796
if (value == null) {
806797
return (type == Double.TYPE) ? 0.0 : null;
807-
} else if (value instanceof Number number) {
808-
return number.doubleValue();
809798
} else {
810-
return Double.parseDouble(value.toString());
799+
return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).doubleValue();
811800
}
812801
} else if (type == Boolean.TYPE || type == Boolean.class) {
813802
if (value == null) {

kilo-client/src/test/java/org/httprpc/kilo/beans/BeanAdapterTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,15 +213,19 @@ public void testVoidCoercion() {
213213
public void testPrimitiveCoercion() {
214214
assertEquals((byte)0, BeanAdapter.coerce(null, Byte.TYPE));
215215
assertEquals((byte)1, BeanAdapter.coerce("1", Byte.TYPE));
216+
assertEquals((byte)1, BeanAdapter.coerce("1.0", Byte.TYPE));
216217

217218
assertEquals((short)0, BeanAdapter.coerce(null, Short.TYPE));
218219
assertEquals((short)2, BeanAdapter.coerce("2", Short.TYPE));
220+
assertEquals((short)2, BeanAdapter.coerce("2.0", Short.TYPE));
219221

220222
assertEquals(0, BeanAdapter.coerce(null, Integer.TYPE));
221223
assertEquals(3, BeanAdapter.coerce("3", Integer.TYPE));
224+
assertEquals(3, BeanAdapter.coerce("3.0", Integer.TYPE));
222225

223226
assertEquals(0L, BeanAdapter.coerce(null, Long.TYPE));
224227
assertEquals(4L, BeanAdapter.coerce("4", Long.TYPE));
228+
assertEquals(4L, BeanAdapter.coerce("4.0", Long.TYPE));
225229

226230
assertEquals(0.0f, BeanAdapter.coerce(null, Float.TYPE));
227231
assertEquals(5.0f, BeanAdapter.coerce("5.0", Float.TYPE));

0 commit comments

Comments
 (0)