2017-02-15 2 views
1

Я знаю в JavaScript вы можете позвонить myCustomObject['something'] и получить значение обратно.Получить значения свойств пользовательских объектов из String Variable

Есть ли способ сделать это на Java?

У меня есть пользовательский объект Student:

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: имя, идентификатор, год и т.д ..

Я не хочу называть фактические добытчиками: getId(), getYear() и т.д ...

I попробовали student[id], но объект не является массивом. Мне нужен способ получить свойство через переменную.

ответ

0

1) Вы можете использовать отражение, чтобы получить соответствие имени поля параметру имени строки и получить связанное значение.

2) Более элегантное решение, если подходит можно заменить класс Student с помощью Enum для хранения атрибутов Студента и 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); 
0

Вы не можете, это fundametal назвать GetId() в Java, другой способ назвать это через отражение, но это повлияет на вас производительности, а также это потребует гораздо больше кода для установки

Смежные вопросы