通过使用string作为元素名称的反射来更改静态元素值

时间:2016-02-29 11:01:33

标签: java reflection

我从数据库获取数据并通过类DBUserValues的字段名访问,并希望将结果保存在DBUserValues对象中。总有一个结果。如何使用字符串访问这些静态变量?有更好的方法吗?

public class DBUserValues {
    public static String username;
    public static String firstname;
}

浏览结果并保存

for (Field field : user.getClass().getDeclaredFields()) {
    // Result should get saved in DBUserValues object
    // DBUserValues.username = result.getString(field.getName();
    // DBUserValues.(field.getName()) = result.getString(field.getName());
}

1 个答案:

答案 0 :(得分:0)

您必须创建一个POJO来映射具有私有属性和公共getter和setter的数据库字段:

class DBUserValues {
    // private attributes
    private String username;
    private String firstname;

    // public getters and setters
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
} 
  

我如何现在调用这些getter和setter? field.invoke("set" + field.getName(), result.getString(field.getName()))不起作用。

您必须创建一个DBUserValues对象来填充,同时缺少代码,但我不认为您必须遍历user.getClass().getDeclaredFields()结果:

// get database values
Field[] fields = user.getClass().getDeclaredFields();

// create an object to populate:
DBUserValues user = new DBUserValues();
user.setUserName(fields[0]);
user.serFirstName(fields[1]);

ADD ON:检查thisthis,了解如何从user.getClass().getDeclaredFields()检索正确的信息。