我的班级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 /属性的名称。
答案 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"
但是......尽量避免这种解决方案。