常用方法
- instanceof
instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化。
自身实例或子类实例 instanceof 自身类 返回true
String s=new String("hello");
System.out.println(s instanceof String); //true
- isInstance
Class类的isInstance(Object obj)方法,obj是被测试的对象,如果obj是调用这个方法的class或接口 的实例,则返回true。
自身类.class.isInstance(自身实例或子类实例) 返回true
String s=new String("hello");
System.out.println(String.class.isInstance(s)); //true
- isAssignableFrom
Class类的isAssignableFrom(Class cls)方法,如果调用这个方法的class或接口 与 参数cls表示的类或接口相同,或者是参数cls表示的类或接口的父类,则返回true。
自身类.class.isAssignableFrom(自身类或子类.class) 返回true
System.out.println(ArrayList.class.isAssignableFrom(Object.class)); //false
System.out.println(Object.class.isAssignableFrom(ArrayList.class)); //true
工具类
public class ClassTypeUtil {
private static final Set<Class> BOX_CLASS = new HashSet<>();
static {
BOX_CLASS.add(Boolean.class);
BOX_CLASS.add(Char.class);
BOX_CLASS.add(Byte.class);
BOX_CLASS.add(String.class);
BOX_CLASS.add(Short.class);
BOX_CLASS.add(Integer.class);
BOX_CLASS.add(Long.class);
BOX_CLASS.add(Float.class);
BOX_CLASS.add(Double.class);
}
/**
* 基本类型或者包装类型
*
* @param cls
* @return
*/
public static boolean simpleType(Class cls) {
return cls.isPrimitive() || BOX_CLASS.contains(cls);
}
/**
* 集合类
* 包含list、set
*
* @param cls
* @return
*/
public static boolean collectionType(Class cls) {
return Collection.class.isAssignableFrom(cls);
}
/**
* listType
*
* @param cls
* @return
*/
public static boolean listType(Class cls) {
return List.class.isAssignableFrom(cls);
}
/**
* setType
*
* @param cls
* @return
*/
public static boolean setType(Class cls) {
return Set.class.isAssignableFrom(cls);
}
/**
* mapType
*
* @param cls
* @return
*/
public static boolean mapType(Class cls) {
return Map.class.isAssignableFrom(cls);
}
/**
* arrayType
*
* @param cls
* @return
*/
public static boolean arrayType(Class cls) {
return cls.isArray();
}
/**
* primitiveArrayType
*
* @param cls
* @return
*/
public static boolean primitiveArray(Class cls) {
if (byte[].class.isAssignableFrom(cls)) {
return true;
} else if (short[].class.isAssignableFrom(cls)) {
return true;
} else if (int[].class.isAssignableFrom(cls)) {
return true;
} else if (long[].class.isAssignableFrom(cls)) {
return true;
} else if (char[].class.isAssignableFrom(cls)) {
return true;
} else if (float[].class.isAssignableFrom(cls)) {
return true;
} else if (double[].class.isAssignableFrom(cls)) {
return true;
} else {
return boolean[].class.isAssignableFrom(cls);
}
}
}