我可以打印出变量的名称吗?

Kit*_* Ho 6 java reflection

我创造了一个号码.常量变量超过1000,那些常量是唯一的整数.

public static final FOO  335343
public static final BAR  234234
public static final BEZ  122424
....
....
....
Run Code Online (Sandbox Code Playgroud)

有没有办法打印出FOO,BAR和BEZ,这是Java中名字的变量?我不熟悉java反射.我不知道这是否有帮助.

if ( FOO == 335343)
   ---> output "FOO"
if ( BAR == 234234 )
   ---> ouptut "BAR"
....
Run Code Online (Sandbox Code Playgroud)

实际上问这个问题是我想写日志到文件

System.out.println("This time the output is " + FOO);
Run Code Online (Sandbox Code Playgroud)

而实际的输出是

This time the output is 335323
Run Code Online (Sandbox Code Playgroud)

我想知道哪个变量来自335323.除了将这些变量及其关联常量放入hashMap之外还有其他方法吗?

谢谢

Fed*_*era 2

你可以使用类似的东西:

for (Field field : MyClass.class.getDeclaredFields()){
    if (field.getType().toString().equals("int")){
        int val = (Integer)field.get(MyClass.this);
        switch (val){
            case 335343:
            case 234234:
                System.out.println(field.getName());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住更改MyClass您的类名,并且至少应该存在一个实例来获取该字段的值。因此,如果您计划在main方法中测试代码,则应该更改MyClass.this为类似new Myclass(). 另一件要记住的事情是,字段是属性而不是方法变量(因此,如果您使用它来访问方法内声明的变量,它将不起作用)。