您的位置:首页 > 编程语言 > Java开发

JAVA反射获取私有值和调用私有方法

2018-01-09 00:00 501 查看
首先定义一个JAVA实体

package serializable;

import java.io.Serializable;

/**
* @author fyj:
* @version 创建时间:2018年1月9日 上午11:03:51
* 类说明
*/
public class Entity implements Serializable{

private static final long serialVersionUID = 1L;

private String name;

private String comment;

public Entity(){
this.name="test";
this.comment="comment";
}

public String getName() {
return name;
}

@SuppressWarnings("unused")
private void setName(String name) {
this.name = name;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}

}

接下来是获取私有值name并修改,获取私有方法setName,并调用(展示实体内容用了fastjson)

package serializable;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import com.alibaba.fastjson.JSON;

/**
* @author fyj:
* @version 创建时间:2018年1月9日 下午2:30:32
* 类说明
*/
public class Clazz {

@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
Entity entity = new Entity();
System.out.println(JSON.toJSON(entity));
Class clazz = entity.getClass();
Field f;
try {
f =clazz.getDeclaredField("name");
f.setAccessible(true);
f.set(entity, "test1");
System.out.println(JSON.toJSON(entity));
} catch (Exception e) {
e.printStackTrace();
}

Method method;
try {
method = clazz.getDeclaredMethod("setName",String.class);
method.setAccessible(true);
method.invoke(entity,"test2");
System.out.println(JSON.toJSON(entity));
} catch (Exception e) {
e.printStackTrace();
}
}

}


运行结果

{"name":"test","comment":"comment"}
{"name":"test1","comment":"comment"}
{"name":"test2","comment":"comment"}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 反射
相关文章推荐