在Java中你可以写:
System.out.println(Abc.class.getName());
即使移动或重命名了类Abc,也会始终打印正确的值。
对于字段名称,您最接近的是什么?
换句话说,我可以编码什么,总能给我带来当前的"即使重命名该字段,类中字段的名称也是如此。理想情况下,如果完全删除该字段,它也将无法编译。或者至少在静态初始化期间访问类时失败。
我希望这可以简化"更改跟踪"系统。它不太像bean" bean属性",因为这些名称在类本身之外是不可见的。
AFAIK,没有"本地人"这样做的方法,但我希望可能有一些注解和/或反射的技巧可以完成这项工作。
我会写下我现在正在做的事情(最低限度简化):
private static final String IS_SWAPPABLE = "isSwappable";
// ...
private boolean isSwappable;
// ...
public boolean isSwappable() {
if ((clientChanges != null) &&
clientChanges.containsKey(IS_SWAPPABLE)) {
return (Boolean) clientChanges.get(IS_SWAPPABLE);
}
return isSwappable;
}
public boolean setSwappable(final boolean newSwappable) {
if (isSwappable() != newSwappable) {
isSwappable = newSwappable;
onFieldChange(IS_SWAPPABLE, newSwappable);
return true;
}
return false;
}
我想要的是一些"魔法"将IS_SWAPPABLE的值设置为" isSwappable"这样如果isSwappable被重命名,那么IS_SWAPPABLE将被适当更新。
OTOH,如果有像Abc.isSwappable(或Abc#isSwappable)这样的语法,或者其他什么,我会把自己作为常量,直接写出来。
我可以做的atm是(一次)查看常量(通过使用一些明确的命名约定),并确保每个都有一个具有相同名称的实例字段。但是,在使用isSwappable的地方使用IS_SWAPPABLE并不是非常保证。
答案 0 :(得分:-1)
看起来很简单。
for (Field field : getClass().getFields()) {
System.out.println(field.getName());
}
然后,您可以使用自己的注释标记字段,然后像这样读取它们的值
for (Field field : getClass().getFields()) {
System.out.println(field.getName());
MyAnnotation annotation = field.getAnnotation( MyAnnotation.class );
System.out.println(annotation.value());
}