Java反射:如何获取变量的名称?

Java反射:如何获取变量的名称?

使用Java反射,可以获得局部变量的名称吗?例如,如果我有这个:

Foo b = new Foo();Foo a = new Foo();Foo r = new Foo();

是否有可能实现一个方法,该方法可以找到这些变量的名称,如下所示:

public void baz(Foo... foos){
    for (Foo foo: foos) {
        // Print the name of each foo - b, a, and r
        System.out.println(***); 
    }}

编辑:这个问题不同于在Java中是否有一种方法可以找到传递给函数的变量的名称?在这一点上,它更纯粹地询问是否可以使用反射来确定局部变量的名称,而另一个问题(包括公认的答案)则更侧重于测试变量的值。


万千封印
浏览 3213回答 3
3回答

MYYA

它是不完全有可能。变量名在Java中没有通信(也可能由于编译器优化而被删除)。编辑(与评论有关):如果您从必须使用它作为函数参数的想法后退一步,下面是另一种选择(我不会使用-参见下面):public&nbsp;void&nbsp;printFieldNames(Object&nbsp;obj,&nbsp;Foo...&nbsp;foos)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;List<Foo>&nbsp;fooList&nbsp;=&nbsp;Arrays.asList(foos); &nbsp;&nbsp;&nbsp;&nbsp;for(Field&nbsp;field&nbsp;:&nbsp;obj.getClass().getFields())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(fooList.contains(field.get())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(field.getName()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}如果a == b, a == r, or b == r或者还有其他字段具有相同的引用。编辑现在没有必要了,因为问题被澄清了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java