如何将属性的名称作为字符串?

时间:2013-10-23 22:56:20

标签: java

我的班级Car有一个名为Field的{​​{1}}。如何仅使用分配给它的属性检索该名称,并且没有任何固定的trunk。 像这个小说一样工作的东西会很棒:

String

输出:

System.out.println(new Car().getTrunk().getField().getName());

我不想使用固定的trunk 来检索String及其名称,因为这不会很好地重构。如果我决定从Field重命名为trunk,我希望通过IDE的重构工具完全处理此问题。

更新boot课程:

Car

背景
我想将Primefaces' Dynamic Columns用于几个实体的CRUD-UI,这些实体使用public class Car{ String trunk; // getters + setters } 包含要由columnTemplate评估的Field s /属性的名称。

2 个答案:

答案 0 :(得分:0)

考虑引入一个包含所有属性(没有值)的枚举,例如

enum CarProperty {
 TRUNK, HOOD, WHATEVER;
}

将它们存储在Car中作为EnumMap:

class Car {
 private Map<CarProperty, String> propsToValues = new EnumMap<>(...);
 public String getValue(CarProperty property) { ... }
}

可以访问

属性名称

((CarProperty) anyPropery).toString()

显然很容易重构

答案 1 :(得分:0)

访问属性名称不是一个好主意。 通过反思,你正在打破OOP原则。

getTrunk()并不总是需要访问trunk属性

你可以有一个

private Trunk trunk;//remember to change the TRUNK_FIELD
public static final TRUNK_FIELD = "trunk"

但是......尽量避免这种解决方案。