-1

我有Car一个Field名为trunk. 如何仅使用分配给它的属性且没有任何固定String的 . 像这样的小说会很棒:

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

输出:

trunk

我不想使用 fixedString来检索Field它的名称,因为那不会很好地重构。如果我决定从 to 重命名trunkboot我希望这完全由我的 IDE 的重构工具处理。

更新Car类:

public class Car{
    String trunk;
    // getters + setters
}

背景:
我想将Primefaces 的动态列用于几个实体的 CRUD-UI,这些实体使用columnTemplate包含Field要评估的 s/属性的名称Expression Language

4

2 回答 2

0

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

enum CarProperty {
 TRUNK, HOOD, WHATEVER;
}

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

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

属性名称可以通过

((CarProperty) anyPropery).toString()

显然很容易重构

于 2013-10-23T23:13:12.023 回答
0

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

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

你可以有一个

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

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

于 2013-10-23T23:13:36.487 回答