1

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

我有一个方法需要访问这些字段之一,但我不知道是哪个。

例如,我想执行以下操作:

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

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

提前致谢。

编辑: myRecords 属于 Records 类型。

4

4 回答 4

4

这可以使用反射来完成:

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
于 2012-05-16T08:33:10.687 回答
2

我认为你需要做的事情对于 Java 是不可能的。

使用您的结构,您应该遍历Records[]并选择正确的结构。

您可以尝试使用HashMap<String, Record>where the Stringis fieldToUse

这样你就可以使用类似的东西hashmap.get(fieldToUse)来获得正确的Record

于 2012-05-16T07:58:49.617 回答
1

一种可能性是更改接口Records以具有getProperty()样式方法:

System.out.println(Records[0].getProperty(fieldToUse));

在内部,Records可以使用Map实现来存储值。假设name是 a Stringage并且scoreIntegersMap将是Map<String, String>,由属性名称键入。此外,Records可以为每个属性提供方法,以在其他地方使用返回适当的类型。

于 2012-05-16T08:00:32.003 回答
0

您可以制作 Record 类型的 Map 表示。以每个字段名作为键。

Record
 name: "YXZ"
 age: 12
 score: 657

现在将其存储在一个数组中。

您现在可以访问

记录[0].get("名称");

就Java而言,这是我能想到的最好的。

于 2012-05-16T07:58:52.317 回答