package com.litesuits.orm.db.utils; import android.annotation.TargetApi; import android.os.Build; import com.litesuits.orm.db.annotation.MapCollection; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.List; /** * 类工具 * * @author mty * @date 2013-6-10下午8:00:46 */ public class ClassUtil { /** * 判断类是否是基础数据类型 * 目前支持11种 * 在{@link com.litesuits.orm.db.utils.DataUtil#injectDataToObject} 中注入也有体现 */ public static boolean isBaseDataType(Class<?> clazz) { return clazz.isPrimitive() || clazz.equals(String.class) || clazz.equals(Boolean.class) || clazz.equals(Integer.class) || clazz.equals(Long.class) || clazz.equals(Float.class) || clazz.equals(Double.class) || clazz.equals(Byte.class) || clazz.equals(Character.class) || clazz.equals(Short.class) || clazz.equals(Date.class) || clazz.equals(byte[].class) || clazz.equals(Byte[].class); } /** * 根据类获取对象:不再必须一个无参构造 */ public static <T> T newInstance(Class<T> claxx) throws IllegalAccessException, InvocationTargetException, InstantiationException { Constructor<?>[] cons = claxx.getDeclaredConstructors(); for (Constructor<?> c : cons) { Class[] cls = c.getParameterTypes(); if (cls.length == 0) { c.setAccessible(true); return (T) c.newInstance(); } else { Object[] objs = new Object[cls.length]; for (int i = 0; i < cls.length; i++) { objs[i] = getDefaultPrimiticeValue(cls[i]); } c.setAccessible(true); return (T) c.newInstance(objs); } } return null; } public static Object newCollection(Class<?> claxx) throws IllegalAccessException, InstantiationException { return claxx.newInstance(); } public static Object newCollectionForField(Field field) throws IllegalAccessException, InstantiationException { MapCollection coll = field.getAnnotation(MapCollection.class); if (coll == null) { return field.getType().newInstance(); } else { return coll.value().newInstance(); } } public static Object newArray(Class<?> claxx, int size) { return Array.newInstance(claxx, size); } public static Object getDefaultPrimiticeValue(Class clazz) { if (clazz.isPrimitive()) { return clazz == boolean.class ? false : 0; } return null; } public static boolean isCollection(Class claxx) { return Collection.class.isAssignableFrom(claxx); } public static boolean isArray(Class claxx) { return claxx.isArray(); } }