java反射根据字段名读取值
2018-03-24 19:08:00
1532次阅读
0个评论
import java.lang.reflect.Field;
/**
* @author Administrator
* 反射工具
*/
public class ReflectHelper {
/**
* 获取obj对象fieldName的Field
* @param obj
* @param fieldName
* @return
*/
public static Field getFieldByFieldName(Object obj, String fieldName) {
for (Class<?> superClass = obj.getClass(); superClass != Object.class; superClass = superClass
.getSuperclass()) {
try {
return superClass.getDeclaredField(fieldName);
} catch (NoSuchFieldException e) {
}
}
return null;
}
/**
* 获取obj对象fieldName的属性值
* @param obj
* @param fieldName
* @return
* @throws SecurityException
* @throws NoSuchFieldException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public static Object getValueByFieldName(Object obj, String fieldName)
throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
Field field = getFieldByFieldName(obj, fieldName);
Object value = null;
if(field!=null){
if (field.isAccessible()) {
value = field.get(obj);
} else {
field.setAccessible(true);
value = field.get(obj);
field.setAccessible(false);
}
}
return value;
}
/**
* 设置obj对象fieldName的属性值
* @param obj
* @param fieldName
* @param value
* @throws SecurityException
* @throws NoSuchFieldException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public static void setValueByFieldName(Object obj, String fieldName,
Object value) throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
Field field = obj.getClass().getDeclaredField(fieldName);
if (field.isAccessible()) {
field.set(obj, value);
} else {
field.setAccessible(true);
field.set(obj, value);
field.setAccessible(false);
}
}
/**
* 测试主函数
* @param args
*/
public static void main(String[] args) {
try {
Class cls = Class.forName("com.flf.entity.User");
Field field;
try {
// 得到一个类的实例
Object user = cls.newInstance();
// 调用根据字段名得到字段的方法
field = ReflectHelper.getFieldByFieldName(user, "loginname");
System.out.println(field.getName());
// 根据字段名给字段赋值
ReflectHelper.setValueByFieldName(user, "loginname","admin");
// 根据字段名获取到字段值
Object nameValue = ReflectHelper.getValueByFieldName(user, "loginname");
System.out.println(nameValue);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
00
相关话题
- Mysql获取某个表的所有字段名
- Java反射允许修改final属性值的方式
- Java根据时间计算是否为上午、中午、下午以及根据日期获得星期几
- Elasticsearch多字段聚合
- Java根据出生日期计算还有几天到生日
- 使用Java8根据属性值对List去重
- ReflectASM高性能反射类
- springboot读取配置文件
- 反射工具包ReflectASM使用
- Elasticsearch按照字段长度过滤
- Apache POI 3.17读取PowerPoint文件PPT
- Nginx 根据URL请求参数转发
- Nginx根据URL实现负载均衡
- ElasticSearch分组后根据sum值排序
- SpringBoot自定义配置文件及读取配置文件