实体类:
public class Person {
private String name = "aaa";
private String sex = "bbb";
private void doSomethingPrivate() {
System.out.println("啪啪啪");
}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + "]";
}
}
测试:
public class TestB {
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Person t = new Person();
System.out.println(t);
Field[] fields = Person.class.getDeclaredFields();
for(Field field :fields) {
//将成员变量开放访问....private 属性将失效 ,成员变量值可以随便改啦!!不关管有没有getter、setter 是否private
field.setAccessible(true);
if("name".equals(field.getName())) {
field.set(t, "我期待的名字");//对成员变量重新赋值
}else if("sex".equals(field.getName())) {
field.set(t, "我期待的性别");//对成员变量重新赋值
}
}
System.out.println(t);
Method[] methods = Person.class.getDeclaredMethods();
for(Method method : methods) {
//将成员方法开放访问....private 属性将失效 ,成员方法也可以随便调用啦!!不管你是否private
method.setAccessible(true);
method.invoke(t, (Object[])null);
}
System.out.println(GsonUtil.toJson(t));
}
}
划重点:主要是通过反射,配合Field、Method 类的setAccessible(true) 方法实现,Google的Gson就是这样实现无getter、setter生成json