package com.github.ltsopensource.core.commons.utils;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashSet;
import java.util.Set;
/**
* @author Robert HG (254963746@qq.com) on 4/20/16.
*/
public class PrimitiveTypeUtils {
private final static Set<Class<?>> primitiveClasses = new HashSet<Class<?>>();
static {
primitiveClasses.add(boolean.class);
primitiveClasses.add(byte.class);
primitiveClasses.add(short.class);
primitiveClasses.add(int.class);
primitiveClasses.add(long.class);
primitiveClasses.add(float.class);
primitiveClasses.add(double.class);
primitiveClasses.add(Boolean.class);
primitiveClasses.add(Byte.class);
primitiveClasses.add(Short.class);
primitiveClasses.add(Integer.class);
primitiveClasses.add(Long.class);
primitiveClasses.add(Float.class);
primitiveClasses.add(Double.class);
primitiveClasses.add(BigInteger.class);
primitiveClasses.add(BigDecimal.class);
primitiveClasses.add(String.class);
}
public static boolean isPrimitiveClass(Class<?> clazz) {
return primitiveClasses.contains(clazz);
}
public static boolean isPrimitiveType(Type type) {
return primitiveClasses.contains(type);
}
@SuppressWarnings("unchecked")
public static <T> T convert(Object object, Type type) {
String valString = object.toString();
if (type == Byte.class || type == byte.class) {
return (T) Byte.valueOf(valString);
} else if (type == Short.class || type == short.class) {
return (T) Short.valueOf(valString);
} else if (type == Integer.class || type == int.class) {
return (T) Integer.valueOf(valString);
} else if (type == Long.class || type == long.class) {
return (T) Long.valueOf(valString);
} else if (type == Boolean.class || type == boolean.class) {
return (T) Boolean.valueOf(valString);
} else if (type == Float.class || type == float.class) {
return (T) Float.valueOf(valString);
} else if (type == Double.class || type == double.class) {
return (T) Double.valueOf(valString);
} else if (type == BigInteger.class) {
return (T) new BigInteger(valString);
} else if (type == BigDecimal.class) {
return (T) new BigDecimal(valString);
} else if (type == String.class) {
return (T) valString;
}
return (T) object;
}
public static Class<?> getUnBoxType(Class<?> boxType) {
if (boxType == null) {
return null;
}
if (boxType == Byte.class) {
return byte.class;
} else if (boxType == Short.class) {
return short.class;
} else if (boxType == Integer.class) {
return int.class;
} else if (boxType == Long.class) {
return long.class;
} else if (boxType == Boolean.class) {
return boolean.class;
} else if (boxType == Float.class) {
return float.class;
} else {
return boxType;
}
}
}