Java思考:如何获取变量名?

使用Java Reflection,是否可以获得本地变量的名称?例如,如果我有这个:

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 8开始,可以通过反射获得一些局部变量名称信息。请参阅下面的“更新”部分。

完整的信息通常存储在类文件中。一种编译时优化是删除它,节省空间(并提供一些混淆)。但是,如果存在,则每个方法都有一个局部变量表属性,该属性列出了局部变量的类型和名称,以及它们在范围内的指令范围。

也许像ASM这样的字节码工程库将允许你在运行时检查此信息。我可以想到的唯一需要此信息的地方是开发工具,因此字节码工程也可能对其他目的有用。

更新:Java 8中对此功能的支持有限。现在可以通过反射获得参数(局部变量的特殊类)名称。除其他目的外,这可以帮助替换@ParameterName依赖项注入容器使用的注释。

以上是 Java思考:如何获取变量名? 的全部内容, 来源链接: utcz.com/qa/434028.html

回到顶部