Java反射:如何检索匿名内部类?

5

我在另一个类(SomeClass)中有一个匿名内部类。

SomeClass.class.getClasses()SomeClass.class.getDeclaredClasses()都返回空数组。

我在Class的Javadocs中找不到关于此的提示。

是否可以通过反射某种方式检索匿名内部类?

匿名内部类和普通内部类之间还有哪些显着差异?


相关: https://dev59.com/tKLia4cB1Zd3GeqPj3oA - StuartLC
2个回答

4
您可以尝试使用暴力搜索 Class$1 ... Class$n,直到找不到为止。

值得思考的是,对于一个匿名内部类,你可以找到它所在的封闭方法,但是 getDeclaredInnerClasses() 不是 Method API 的一部分。 - alphazero
我想我可以理解为什么没有getDeclaredInnerClasses()。如果不改变类文件格式,那就无法实现这一功能。 - Stephen C
类支持元信息,其中可以放置此类信息。我认为这并不是因为找不到好的用例。也许你尝试做的事情可以用另一种方式来完成。例如,使用枚举? - Peter Lawrey

0

如果使用反射,那可能是一个非常糟糕的想法。撇开这个不谈,我相信你可以在运行时添加额外的内部类,因此列出可能尚未考虑的类是没有意义的。我猜,列出当前加载的类需要通过Java代理或类似的方式。

匿名内部类有虚构的名称、一个封闭方法和额外的合成字段,用于复制已被复制的外部局部变量。在运行时,一个类基本上与另一个类相同。请记住,1.1引入了内部类,但自1.0以来,类文件几乎没有改变。


虽然不是解决方案的答案,但是有很好的论据。我会标记为正确的。 - java.is.for.desktop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接