使用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反射:如何获取变量的名称? 我发现关于这个话题的讨论很多,但从来没有令人满意的答案。。 我怎样才能得到变量的名称并得到字符串作为结果?这在Java可能吗?
使用Java反射,是否可以获取局部变量的名称?例如,如果我有: 有没有可能实现一种方法,可以找到这些变量的名称,比如: 编辑:这个问题与Java中有没有找到传递给函数的变量名称的方法不同?在这一点上,它更纯粹地询问一个人是否可以使用反射来确定局部变量的名称,而另一个问题(包括公认的答案)更侧重于测试变量的值。
问题内容: “重要的是要理解,引用变量的类型(而不是它所引用的对象的类型)决定了可以访问哪些成员。” 那句话你到底是什么意思?这仅限于继承概念吗?JVM如何处理它? 问题答案: 这意味着假设您具有: 的类型的 变量 是,但对象的类型是指是。这是变量类型,它决定了您可以执行的操作-因此您无法调用 编译器仅知道您在上调用方法,其中不包括。同样,重载方法仅针对您所知道的方法进行解析:
如何获取到实体类的变量名,用的tkmybatis,没有方法引用,现在写的条件都是字符串"isDeleted"这种,不好维护,有没有方式Dog.的方式拿到变量名称,不想写好多常量,有没有类似Lombok注解的方式去实现
我面临以下问题:我必须给成千上万的图形用户界面元素命名。如果它能像这样工作,那就太好了: 如果我能将元素的名称设置为“Classname.myMenuItem”,那就太好了。 是否有任何方法来获取变量的名称(变量名称ofc,而不是JMenuItem.getName())?