return ((BigDecimal) number).toBigInteger();
}
if (number instanceof BigInteger) {
- return number;
+ return new BigInteger(number.toString());
}
return BigInteger.valueOf(number.longValue());
}
if (BigDecimal.class.equals(type)) {
if (number instanceof BigDecimal) {
- return number;
+ return new BigDecimal(number.toString());
}
if (number instanceof BigInteger) {
return new BigDecimal((BigInteger) number);
}
- return new BigDecimal(number.toString());
+ return new BigDecimal(number.doubleValue());
}
if (Byte.TYPE == type || Byte.class.equals(type)) {
return new Byte(number.byteValue());
public final static Object coerceToType(final Object obj, final Class type)
throws IllegalArgumentException {
if (type == null || Object.class.equals(type) ||
- (obj != null && type.isAssignableFrom(obj.getClass()))) {
+ (obj != null && type.equals(obj.getClass()))) {
return obj;
}
if (String.class.equals(type)) {
if (Boolean.class.equals(type) || Boolean.TYPE == type) {
return coerceToBoolean(obj);
}
+ if (obj != null && type.isAssignableFrom(obj.getClass())) {
+ return obj;
+ }
if (type.isEnum()) {
return coerceToEnum(obj, type);
}
testIsSame(Float.valueOf(0.123456F));
}
- public void testCoerceIntegerToNumber() {
- Integer input = 4390241;
- Object output = ELSupport.coerceToType(input, Number.class);
- assertEquals(input, output);
- }
-
private static void testIsSame(Object value) {
assertEquals(value, ELSupport.coerceToNumber(value, value.getClass()));
}