java类 跳过private限制,访问对象的成员属性、成员方法

实体类:

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



猜你喜欢

转载自blog.csdn.net/yuzfengxu/article/details/80283321