问题陈述:
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(***); // Placeholder for variable name access } }
解决方案:
在 Java 8 之前,通过反射检索局部变量名称是不可能的。但是,该版本中引入了部分支持。参数名称是一种特殊类型的局部变量,可以通过反射来访问。事实证明,这对于替换依赖注入框架常用的 @ParameterName 等注释非常有用。
要获得更全面的局部变量名称信息,检查类文件可能会提供一些见解。在编译过程中,优化技术有时会消除这些数据以节省空间。但是,如果存在,方法的局部变量表属性会列出其各自指令范围内的变量类型和名称。
字节码工程工具(例如 ASM)可以提供在运行时检查此信息的机制。鉴于此功能主要在开发环境中的利基应用,此类库提供的补充功能不仅仅是提取变量名称。
以上是Java反射可以检索本地声明的变量名吗?的详细内容。更多信息请关注PHP中文网其他相关文章!