package cn.jeesoft.core.utils; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import org.springframework.beans.BeanUtils; /** * Class帮助类 * @version v0.1.0 king 2014-11-21 Class类型判断 */ public class ClassUtils { /** * 判断是否继承/接口实现关系 * @param parent 父类 * @param subclass 之类 * @return */ public static boolean isFrom(Class<?> parent, Class<?> subclass) { if (parent == subclass) { return true; } if (parent == null || subclass == null) { return false; } return parent.isAssignableFrom(subclass); } /** * 取类名 * @param clazz * @return */ public static String getShortClassName(Class<?> clazz) { return clazz.getSimpleName(); } /** * 取包名 * @param clazz * @return 没有则返回null */ public static String getPackageName(Class<?> clazz) { String className = clazz.getName(); int lastIndex = className.lastIndexOf("."); if (lastIndex != -1) { return className.substring(0, lastIndex); } else { return null; } } /** * 取父类泛型 * @param clazz * @return 没有则返回null */ @SuppressWarnings("rawtypes") public static Class[] getGenericSuperclass(Class<?> clazz) { try { Type typeGeneric = clazz.getGenericSuperclass(); if (typeGeneric != null) { if (typeGeneric instanceof ParameterizedType) { return getGeneric((ParameterizedType) typeGeneric); } } } catch (Exception e) { } return null; } /** * 取父接口泛型 * @param clazz * @return 没有则返回null */ @SuppressWarnings("rawtypes") public static Class[] getGenericInterfaces(Class<?> clazz) { try { Type typeGeneric = clazz.getGenericInterfaces()[0]; if (typeGeneric != null) { if (typeGeneric instanceof ParameterizedType) { return getGeneric((ParameterizedType) typeGeneric); } } } catch (Exception e) { } return null; } /** * 取泛型 * @param clazz * @return 没有则返回null */ @SuppressWarnings("rawtypes") public static Class[] getGeneric(ParameterizedType type) { try { if (type != null) { Type[] typeArgs = type.getActualTypeArguments(); if (typeArgs != null && typeArgs.length > 0) { Class[] args = new Class[typeArgs.length]; for (int i=0; i<typeArgs.length; i++) { Type arg = typeArgs[i]; args[i] = (Class) arg; } return args; } } } catch (Exception e) { } return null; } /** * 类实例化 * @param <T> * @param clazz * @return */ public static <T> T newInstance(Class<T> clazz) { return BeanUtils.instantiateClass(clazz); } }