gpt4 book ai didi

java - 是否可以在运行时通过反射在另一个对象中定义 "explore"哪些对象?

转载 作者:行者123 更新时间:2023-11-30 07:35:39 24 4
gpt4 key购买 nike

考虑这段代码:

object A {
object AA extends A
object AB extends A
object AC extends A
}; class A

如何在运行时“查看”对象 A 中定义的对象?我认为 object A 中的一个方法和一些简单的反射代码就足够了,但似乎编译器在编译时展平了对象层次结构并创建了以下类文件:

  • A.class – A 类
  • A$class – A 的伴随对象
  • A$AA$.class – AA 对象
  • A$AB$.class – AB 对象
  • A$AC$.class – AC 对象

编译后,伴随对象A中没有AAABAC的标志,这会有我的 magicMethod

似乎 ClassLoader 类有一些与我打算做的相关的方法,但似乎都期望类的确切字符串名称。有没有办法让 ClassLoader 在该类的路径中找到以调用此方法的类 (A$) 开头的所有类文件?

最佳答案

根本问题是JVM没有内部类的概念。它们是在 Java 1.1 中添加的,但 JVM 规范在 1.0 和引入 invokedynamic 之间保持完全不变(说真的!)。

作为一个 hack,你总是可以解析类名并在 $

上拆分

更新

为了做到这一点,不幸的是你必须扫描类路径。

该技术最著名的应用之一是 Apache Commons Discovery:http://commons.apache.org/discovery/ (这是你可以用来让你的生活更轻松的东西)

Spring 也使用相同的方法。

关于java - 是否可以在运行时通过反射在另一个对象中定义 "explore"哪些对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com