Number castNumber(Class<?> cl, Json v) { if (!v.isNumber()) throw new IllegalArgumentException( "Trying to cast " + v + " as a Number bean property, but it's not a number."); if (cl.equals(short.class) || cl.equals(Short.class)) return v.asShort(); else if (cl.equals(byte.class) || cl.equals(Byte.class)) return v.asByte(); else if (cl.equals(int.class) || cl.equals(Integer.class)) return v.asInteger(); else if (cl.equals(float.class) || cl.equals(Float.class)) return v.asFloat(); else if (cl.equals(long.class) || cl.equals(Long.class)) return v.asLong(); else if (cl.equals(BigDecimal.class)) return new BigDecimal(v.asDouble()); else if (cl.equals(BigInteger.class)) return BigInteger.valueOf(v.asLong()); else if (cl.equals(AtomicInteger.class)) return new AtomicInteger(v.asInteger()); else if (cl.equals(AtomicLong.class)) return new AtomicLong(v.asLong()); else return v.asDouble(); }