如何访问数组中的字段,其中存储在变量中的字段的名称?
我有一个Record []类型的数组,其中包含诸如名称,年龄和分数等字段。如何访问数组中的字段,其中存储在变量中的字段的名称?
我有一个方法,将需要访问这些领域之一,但我不知道哪个。
我想,例如,请执行下列操作:
String fieldToUse = "name";
System.out.println(myRecords[0].fieldToUse);
在这种情况下,我可以切换到fieldToUse我想找到哪个领域。这不起作用,但是 - 我该怎么做?
在此先感谢。
编辑:myRecords是记录类型。
我认为你需要做的事对于Java来说是不可能的。
有了你的结构,你应该遍历你的Records[]
并选择正确的。
您可以尝试使用HashMap<String, Record>
,其中String
为fieldToUse
。
这样你可以使用像hashmap.get(fieldToUse)
的东西,以获得正确Record
它可能使用反射。 – dacwe
您可以录制类型的地图表示。以每个字段名称作为关键字。
Record
name: "YXZ"
age: 12
score: 657
现在将其存储在数组中。
您现在可以访问
记录[0] .get(“name”);
这是我能想到的最好的Java方面。
如果您在程序的其他部分使用字段访问,那么这不是一个很好的解决方案(那么您需要用这种类型的访问来替换这些事件...)。 – dacwe
同意。如果必须保留记录对象,那么反射将是一个好主意,正如你在其他答案中提到的那样。 –
一种可能性是改变的Records
接口有一个getProperty()
风格方法:
System.out.println(Records[0].getProperty(fieldToUse));
内部,Records
可以使用Map
实现存储的值。假设name
是String
,age
和score
是Integer
s Map
将是Map<String, String>
,由属性名称作为键。此外,Records
可以为每个属性提供方法,以供返回适当类型的其他地方使用。
可以这样做用便餐:
Field field = Record.class.getField(fieldToUse);
Object fieldValue = field.get(record);
完全exeample:
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
什么是'记录类型[0]' ? – NPE
对不起,我只是纠正了上面的帖子。该数组称为myRecords []并且类型为Records。类型记录包括一个字符串和一对数字。 – GuiR