经济码农 2017-04-19 03:23 采纳率: 50%
浏览 17889

JAVA反射使用Field的set()方法设置属性,为什么不能用类的get()方法获取属性内容?

 使用反射设置好了私有属性,在不使用setAccessible(true)时候,为什么不能使用demo.getName()方法获取属性? 
public class Test{
    public static void main(String [] args)
    {
            Class clazz = Class.forName("com.test.Demo");
            Demo demo = (Demo)clazz.newInstance();
            //f.setAccessible(true);
            Field f = clazz.getDeclaredField("name");
            f.set(demo,"zhangsan");
            System.out.println(test1.getName());   //
    }
}

Demo类(com.test包)如下

Demo.java

 public class Demo {
    private String name;
    private int id;
    private double salary;



    public Demo(String name, int id, double salary) {
        super();
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public Demo(){}

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public double getSalary() {
        return salary;
    }
    public void setSalary(double salary) {
        this.salary = salary;
    }
  • 写回答

2条回答 默认 最新

  • 山洼之神 2017-04-19 11:23
    关注

    你的使用不正确,给个范例
    String type = field[j].getGenericType().toString(); // 获取属性的类型
    if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
    Method m = model.getClass().getMethod("get" + name);
    String value = (String) m.invoke(model); // 调用getter方法获取属性值
    if (value == null) {
    m = model.getClass().getMethod("set"+name,String.class);
    m.invoke(model, "");
    }
    }
    if (type.equals("class java.lang.Integer")) {
    Method m = model.getClass().getMethod("get" + name);
    Integer value = (Integer) m.invoke(model);
    if (value == null) {
    m = model.getClass().getMethod("set"+name,Integer.class);
    m.invoke(model, 0);
    }
    }
    if (type.equals("class java.lang.Boolean")) {
    Method m = model.getClass().getMethod("get" + name);
    Boolean value = (Boolean) m.invoke(model);
    if (value == null) {
    m = model.getClass().getMethod("set"+name,Boolean.class);
    m.invoke(model, false);
    }
    }
    if (type.equals("class java.util.Date")) {
    Method m = model.getClass().getMethod("get" + name);
    Date value = (Date) m.invoke(model);
    if (value == null) {
    m = model.getClass().getMethod("set"+name,Date.class);
    m.invoke(model, new Date());
    }
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 MapReduce实现倒排索引失败
  • ¥15 luckysheet
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题