Java 如何以字符串形式获取属性的名称?

Java 如何以字符串形式获取属性的名称?,java,Java,我有一个类Car,它有一个名为trunk的字段。如何仅使用分配给该名称的属性检索该名称,而不使用任何固定的字符串。 像这样的小说会很棒: System.out.println(new Car().getTrunk().getField().getName()); 输出: trunk 我不想使用一个固定的字符串来检索字段及其名称,因为这不会很好地重构。如果我决定从trunk重命名为boot,我希望IDE的重构工具能够完全处理这个问题 更新Carclass: public class Car{

我有一个类
Car
,它有一个名为
trunk
字段。如何仅使用分配给该名称的属性检索该名称,而不使用任何固定的
字符串
。 像这样的小说会很棒:

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

trunk
我不想使用一个固定的
字符串
来检索
字段及其名称,因为这不会很好地重构。如果我决定从
trunk
重命名为
boot
,我希望IDE的重构工具能够完全处理这个问题

更新
Car
class:

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

我想为几个实体使用CRUD-UI,这些实体使用
列模板
,其中包含
字段
s/属性的名称,这些属性将由
表达式语言

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

enum CarProperty {
 TRUNK, HOOD, WHATEVER;
}
并将其作为地图存储在车内:

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

显然重构很容易

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

GetRunk()并非总是需要访问trunk属性

你可以喝一杯

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

但是。。。尽量避免使用此解决方案。

查找反射。在我看来,属性名称是“trunk”。你知道的,因为你说“getTrunk”。你怎么可能不知道酒店的名称,但仍然能够引用它呢?我怀疑你没有正确处理你的问题。你能解释一下你为什么需要这个吗?当前的IDE已经很好地处理了很多重构问题,尤其是重命名字段。如果您决定将
trunk
重命名为
boot
,将其设置为
字符串将防止IDE在重构时注意到它。你想通过这样做实现什么?谢谢你的努力。但这确实是一个丑陋的解决办法。想象一下,在一个实际的项目中,有很多类可以使用它。@Lester同意,但正如omarhry所说,你想做的是打破OOP原则,这总是很难看。@Lester顺便说一句,如果你使用Intellij Idea重构代码,它会建议你更新getter和setter以及其他相关代码。也许这会有帮助。什么OOP原则被打破了?我用它来减少诸如getter和setter之类的样板代码,这是一个很好的工具。谢谢你的回答,但我看不出这将如何很好地进行重构。编辑:使用公共TRUNK_字段,重构TRUNK变量时,也要更改“TRUNK”。这不能解决你的问题吗?
private Trunk trunk;//remember to change the TRUNK_FIELD
public static final TRUNK_FIELD = "trunk"