我有一个 Records[] 类型的数组,其中包含姓名、年龄和分数等字段。
我有一个方法需要访问这些字段之一,但我不知道是哪个。
例如,我想执行以下操作:
String fieldToUse = "name";
System.out.println(myRecords[0].fieldToUse);
在这种情况下,我可以将 fieldToUse 切换到我想找到的任何字段。但是,这不起作用-我该怎么做?
提前致谢。
编辑: myRecords 属于 Records 类型。
这可以使用反射来完成:
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
我认为你需要做的事情对于 Java 是不可能的。
使用您的结构,您应该遍历Records[]
并选择正确的结构。
您可以尝试使用HashMap<String, Record>
where the String
is fieldToUse
。
这样你就可以使用类似的东西hashmap.get(fieldToUse)
来获得正确的Record
一种可能性是更改接口Records
以具有getProperty()
样式方法:
System.out.println(Records[0].getProperty(fieldToUse));
在内部,Records
可以使用Map
实现来存储值。假设name
是 a String
,age
并且score
是Integer
sMap
将是Map<String, String>
,由属性名称键入。此外,Records
可以为每个属性提供方法,以在其他地方使用返回适当的类型。
您可以制作 Record 类型的 Map 表示。以每个字段名作为键。
Record
name: "YXZ"
age: 12
score: 657
现在将其存储在一个数组中。
您现在可以访问
记录[0].get("名称");
就Java而言,这是我能想到的最好的。