一.获取指定字段的值
- 需求:
- 用户设置要显示的字段,比如用户选择要显示的字段是:姓名,性别,年龄这三个字段,其余字段就不显示
- 查询数据库获得的实体类里面包含了用户需要显示的字段,如何通过用户选择的字段去匹配获取相对应的值?
@Data
public class Student {
private String name ;
private int age ;
}
public class Test {
static Class clazz1= Student.class;
public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {
Student student=new Student();
student.setName("张三");
student.setAge(20);
//方式1
String fieldName="name";
//通过字符串的变化拼接处getName,即获取name的get方法
String methodName="get"+
fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
Method method = clazz1.getMethod(methodName);
Object object = method.invoke(student);
System.out.println(object.toString());//输出:张三
//方式2
//假设选择要现实的字段是name和age两个,或者多个以上
String[] strArr = new String[]{"name","age"};
Map resultMap = new HashMap();
for (String s : strArr) {
Field field = clazz1.getDeclaredField(s);//获取私有字段
field.setAccessible(true);//设置权限
Object object2 = field.get(student);//该参数为想要获取值得对象
System.out.println(object2.toString());
resultMap.put(s,object2.toString());
}
System.out.println(resultMap);
//map转实体类
Student student2=new Student();
student2 = JSON.parseObject(JSON.toJSONString(resultMap), Student.class);
System.out.println(student2);
}
}
测试输出
二.设置字段的值
//设置字段的值
//方式一
Field field = clazz1.getDeclaredField("name");
Object object3=clazz1.newInstance();
field.setAccessible(true);
field.set(object3,"王五");
Student student3=(Student) object3;
System.out.println(student3.getName());
//方式二
Student student4=new Student();
String fieldName2="name";
String methodName2="set"+fieldName2.substring(0,1).toUpperCase()+
fieldName.substring(1);
Method method2 = clazz1.getMethod(methodName2,String.class);
method2.invoke(student4, "李四");
System.out.println(student4.getName());
版权声明:本文为BelleHarvester原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。