如何访问数组中的字段,其中存储在变量中的字段名称?

时间:2012-05-16 07:54:39

标签: java arrays variables

我有一个类型为Records []的数组,其中包含名称,年龄和分数等字段。

我有一个方法需要访问其中一个字段,但我不知道哪个。

例如,我想做以下事情:

String fieldToUse = "name";
System.out.println(myRecords[0].fieldToUse);

在这种情况下,我可以将fieldToUse切换到我想要找到的任何一个字段。但这不起作用 - 我该怎么做?

提前致谢。

编辑:myRecords的类型为记录。

4 个答案:

答案 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实现来存储值。假设nameString,而agescoreIntegerMapMap<String, String>,则由Records键入属性名称。此外,{{1}}可以为每个属性提供方法,以便在其他地方使用返回相应类型的方法。