我有一个类型为Records []的数组,其中包含名称,年龄和分数等字段。
我有一个方法需要访问其中一个字段,但我不知道哪个。
例如,我想做以下事情:
String fieldToUse = "name";
System.out.println(myRecords[0].fieldToUse);
在这种情况下,我可以将fieldToUse切换到我想要找到的任何一个字段。但这不起作用 - 我该怎么做?
提前致谢。
编辑:myRecords的类型为记录。
答案 0 :(得分:5)
这可以使用反射来完成:
Field field = Record.class.getField(fieldToUse);
Object fieldValue = field.get(record);
static class Record {
public String name;
public int age;
public Record(String name, int age) {
this.name = name;
this.age = age;
}
}
public static void main(String[] args) throws Exception {
Record[] records = new Record[2];
records[0] = new Record("David", 29);
records[1] = new Record("Andreas", 28);
System.out.println("Davids name: " + getField("name", records[0]));
System.out.println("Andreas age: " + getField("age", records[1]));
}
private static Object getField(String field, Record record) throws Exception {
return record.getClass().getField(field).get(record);
}
打印:
Davids name: David
Andreas age: 28
答案 1 :(得分:2)
我认为用Java做你需要做的事情是不可能的。
根据您的结构,您应该遍历Records[]
并选择正确的结构。
您可以尝试使用HashMap<String, Record>
为String
fieldToUse
的{{1}}。
通过这种方式,您可以使用hashmap.get(fieldToUse)
之类的内容来获得正确的Record
答案 2 :(得分:1)
您可以创建Record类型的Map表示。将每个字段名称作为键。
Record
name: "YXZ"
age: 12
score: 657
现在将其存储在一个数组中。
您现在可以访问
记录[0]获得( “名称”);
这是我能想到的最好的Java。
答案 3 :(得分:1)
可能会将Records
的界面更改为getProperty()
样式方法:
System.out.println(Records[0].getProperty(fieldToUse));
在内部,Records
可以使用Map
实现来存储值。假设name
为String
,而age
和score
为Integer
,Map
为Map<String, String>
,则由Records
键入属性名称。此外,{{1}}可以为每个属性提供方法,以便在其他地方使用返回相应类型的方法。