Class类
简介
程序运行时,系统队所有对象进行标识,通过Class类记录每个对象信息。
获取Class对象
方法1
Object obj = new Object();
Class clazz = obj.getClass();
方法2
Class clazz = Class.forName("Object")
A a = (A)Class.forName(“pacage.A”).newInstance();
与A a =new A();一样的效果
基本数据类型获取Class
Class clazz = int.class;//获取int的Class
Class clazz = Double[].class;//获取数组的Class
常用的方法
getName() 返回该Class对象标识实体(类,接口,数组,基本类型,void)的名称
newInstance()创建一个类的实例obj.getClass.newInstance()默认调用无参构造器
getClassLoader() 获取该类的类加载器
getSuperclass() 获取超类Class
isArray() 判断该Class对象是否为数组类
getDeclaredFields()获取该Class对象的自己声明的字段
通过设置setAccessible(true)获取private修饰的字段
getFields() 获取包括父类的public的字段
对象转Map
public static Map<String, Object> object2Map(Object o) throws IllegalAccessException {
Map<String, Object> map = new HashMap<>();
if(null == o){
return map;
}
Class clazz = o.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields){
//获取private成员变量需要此设置
field.setAccessible(true);
//Field.get(Object o)返回指定对象o中该field字段的值
//Field.set(Object o, Object v)设置指定对象o中该field字段的值为新值v
map.put(field.getName(),field.get(o));
}
return map;
}
Map转对象
public static Object map2Object(Map<String, Object> map, Class<?> clazz) throws IllegalAccessException, InstantiationException {
if(CollectionUtils.isEmpty(map)){
return null;
}
Object o = new Object();
o = clazz.newInstance();
Field[] fields = o.getClass().getDeclaredFields();
for (Field field : fields){
//获取该字段的修饰符 对应值 PUBLIC 1 PRIVATE 2 PROTECTED等
int modifiter = field.getModifiers();
//如果为static或final修饰的字段,则不继续处理
if (Modifier.isStatic(modifiter) || Modifier.isFinal(modifiter)) {
continue;
}
field.setAccessible(true);
//设置该对象该字段
field.set(o,map.get(field.getName()));
}
return o;
}