【问题标题】:Java reflection: How can I retrieve anonymous inner classes?Java 反射:如何检索匿名内部类?
【发布时间】:2010-12-11 21:52:22
【问题描述】:

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

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

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

能否以某种方式使用反射检索匿名内部类?

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

【问题讨论】:

标签: java reflection inner-classes anonymous-class


【解决方案1】:

您可以尝试对 Class$1 ... Class$n 进行暴力搜索,直到找不到更多内容为止。

【讨论】:

  • 深思熟虑,给定一个匿名内部类,您可以找到它的封闭方法,但 getDeclaredInnerClasses() 不是方法 api 的一部分。
  • 我想我可以理解为什么没有getDeclaredInnerClasses()。不改变类文件格式是不可能实现的。
  • 类支持元信息,这些信息可以放在哪里。我认为它不存在,因为可能没有找到好的用例。也许您正在尝试做的事情可以通过另一种方式完成。例如与 Enum 的??
【解决方案2】:

如果它使用反射,这可能是一个非常糟糕的主意。撇开这一点不谈,我相信您可以在运行时附加内部类,因此列出可能尚未想到的类是没有意义的。我猜,列出当前加载的类需要通过 Java 代理或类似的。

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

【讨论】:

  • 虽然不是一个解决方案的答案,但很好的论据。将标记为正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 2019-06-05
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
相关资源
最近更新 更多