从字符串变量

时间:2017-02-15 19:40:04

标签: java android class

我知道在JavaScript中你可以调用myCustomObject['something']并获取值。

有没有办法在Java中做到这一点?

我有一个自定义对象学生

public class Student  {

    private String name;
    private String id;
    private String year;
    private String homeroom;

    public String getName() {  return name; }

    public void setName(String name) { this.name = name; }

    public String getId() {  return id; }

    public void setId(String id) { this.id = id; }

    public String getYear() { return year; }

    public void setYear(String year) { this.year = year; }

    public String getHomeroom() { return homeroom;  }

    public void setHomeroom(String homeroom) { this.homeroom = homeroom;  }

}

我想要一种方法来调用方法来获取Student.getValueForKey(key)之类的属性。其中key可以是Student类的任何属性:name,id,year等。

我不想调用实际的getter:getId()getYear()等...

我尝试了student[id],但对象不是数组。我需要一种通过变量获取属性的方法。

2 个答案:

答案 0 :(得分:0)

你不能,这是在java中调用getId()的基础,另一种方式是通过反射调用它,但它会影响你的性能,以及它需要更多代码来设置

答案 1 :(得分:0)

1)您可以使用反射来检索与String name参数匹配的字段名称并获取相关值。

2)一个更优雅的解决方案,如果合适的话可以用Enum替换Student类来存储学生和EnumMap实例的属性来代表一个人:

public enum StudentAttributes {
    NAME, ID, YEAR, HOME_ROOM;
}

然后做:

EnumMap<StudentAttributes, String> studentOne = new EnumMap<StudentAttributes, String>(StudentAttributes.class);

studentMap.put(StudentAttributes.NAME, "john");
studentMap.put(StudentAttributes.YEAR, "1945");
...
String name = studentMap.get(StudentAttributes.NAME);
String year = studentMap.get(StudentAttributes.YEAR);