Java 反射 getDeclareFields getModifiers setAccessible(true)
Posted on 2016-05-27 15:05 Anhw 阅读(855) 评论(0) 编辑 收藏 举报示例代码:
public static Map<String, Object> dtoToMap(Object obj, String pre,
String las) {
Map result = new HashMap();
Class clazz = obj.getClass();
Field[] fs = clazz.getDeclaredFields();
for (int i = 0; i < fs.length; i += 1) {
if (Modifier.isStatic(fs[i].getModifiers())) {
continue;
}
fs[i].setAccessible(true);
try {
Object value = fs[i].get(obj);
if (value != null) {
result.put(pre + fs[i].getName() + las, value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
方法解释:
通过反射获取obj的属性并对其拼接前缀和后缀
getClass:获取obj对象
getDeclaredFields()
返回 Field
对象的一个数组,这些对象反映此 Class
对象所表示的类或接口所声明的所有字段。获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
getDeclaredField()
getFields()
得某个类的所有的公共(public)的字段,包括父类。
getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。
类似上面所讲。
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
name
- 方法名
parameterTypes
- 参数数组
Modifier.isStatic(fs[i].getModifiers())
判断获取的Class属性是否是静态 修饰符
类似的还有public、private、protected
continue
跳出continue所属代码块,继续执行下面的代码
break
不继续执行break之后的代码块,跳到和break所在代码块相关的外层代码块开始执行。
fs[i].setAccessible(true);
true或false决定是否可以访问获取的数组里面的属性值
fs[i].getName()
获取数组中得到的属性的名字