This answer to another question建议,作为通过反射查找匿名类的一种解决方法,只需尝试所有名称,从开始...$1
并计数直到找不到更多名称。这是否可以保证找到所有内部类,或者是否存在它们从 0 开始或某些数字被遗漏的情况(无论出于何种原因)?
问问题
132 次
3 回答
6
JLS 13.1规定:
类或接口必须以其二进制名称命名,必须满足以下约束:
- 顶级类型的二进制名称(第 7.6 节)是其规范名称(第 6.7 节)。
- [...]
- 匿名类的二进制名称(第 15.9.5 节)由其直接封闭类型的二进制名称组成,后跟 $,后跟非空数字序列。
所以理论上,它不必从 1 开始,但它必须类似于EnclosingClass$N
N 是一个数字。
于 2012-09-04T16:20:07.157 回答
2
于 2012-09-04T16:19:08.420 回答
0
在这个指向 java.sun.com教程的链接中,它解释了来自第 243 页的匿名类以及遵循所描述的命名约定的示例输出。例如 *$1.class、*$2.class 等。在第 246 页的顶部它说:
运行时匿名类的名称也显示在程序输出中。它们也是用于指定它们各自的类文件的名称。匿名类毕竟不是那么匿名。
考虑到本教程在 Oracle 网站上,几乎可以肯定这是一个不会改变的约定。希望这可以帮助 :)
于 2012-09-04T16:31:10.863 回答