|
27 | 27 | import java.lang.reflect.ParameterizedType; |
28 | 28 | import java.lang.reflect.Proxy; |
29 | 29 | import java.lang.reflect.Type; |
| 30 | +import java.math.BigDecimal; |
30 | 31 | import java.net.URI; |
31 | 32 | import java.net.URL; |
32 | 33 | import java.nio.file.Path; |
@@ -764,50 +765,38 @@ private static Object toRawType(Object value, Class<?> type) { |
764 | 765 | } else if (type == Byte.TYPE || type == Byte.class) { |
765 | 766 | if (value == null) { |
766 | 767 | return (type == Byte.TYPE) ? (byte)0 : null; |
767 | | - } else if (value instanceof Number number) { |
768 | | - return number.byteValue(); |
769 | 768 | } else { |
770 | | - return Byte.parseByte(value.toString()); |
| 769 | + return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).byteValue(); |
771 | 770 | } |
772 | 771 | } else if (type == Short.TYPE || type == Short.class) { |
773 | 772 | if (value == null) { |
774 | 773 | return (type == Short.TYPE) ? (short)0 : null; |
775 | | - } else if (value instanceof Number number) { |
776 | | - return number.shortValue(); |
777 | 774 | } else { |
778 | | - return Short.parseShort(value.toString()); |
| 775 | + return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).shortValue(); |
779 | 776 | } |
780 | 777 | } else if (type == Integer.TYPE || type == Integer.class) { |
781 | 778 | if (value == null) { |
782 | 779 | return (type == Integer.TYPE) ? 0 : null; |
783 | | - } else if (value instanceof Number number) { |
784 | | - return number.intValue(); |
785 | 780 | } else { |
786 | | - return Integer.parseInt(value.toString()); |
| 781 | + return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).intValue(); |
787 | 782 | } |
788 | 783 | } else if (type == Long.TYPE || type == Long.class) { |
789 | 784 | if (value == null) { |
790 | 785 | return (type == Long.TYPE) ? 0L : null; |
791 | | - } else if (value instanceof Number number) { |
792 | | - return number.longValue(); |
793 | 786 | } else { |
794 | | - return Long.parseLong(value.toString()); |
| 787 | + return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).longValue(); |
795 | 788 | } |
796 | 789 | } else if (type == Float.TYPE || type == Float.class) { |
797 | 790 | if (value == null) { |
798 | 791 | return (type == Float.TYPE) ? 0.0f : null; |
799 | | - } else if (value instanceof Number number) { |
800 | | - return number.floatValue(); |
801 | 792 | } else { |
802 | | - return Float.parseFloat(value.toString()); |
| 793 | + return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).floatValue(); |
803 | 794 | } |
804 | 795 | } else if (type == Double.TYPE || type == Double.class) { |
805 | 796 | if (value == null) { |
806 | 797 | return (type == Double.TYPE) ? 0.0 : null; |
807 | | - } else if (value instanceof Number number) { |
808 | | - return number.doubleValue(); |
809 | 798 | } else { |
810 | | - return Double.parseDouble(value.toString()); |
| 799 | + return coalesce(cast(value, Number.class), () -> new BigDecimal(value.toString())).doubleValue(); |
811 | 800 | } |
812 | 801 | } else if (type == Boolean.TYPE || type == Boolean.class) { |
813 | 802 | if (value == null) { |
|
0 commit comments