当前位置: 首页 > 面试题库 >

在Java中可以“反射地”访问方法的源代码吗?

陶裕
2023-03-14
问题内容

恐怕答案是否定的,但是也许你们中的一个使我感到惊讶。

谢谢。

编辑1:
我知道这个问题没有多大意义,但我认为这是可以理解的,遗憾的是,答案是否定的。无论如何,我更改了问题的标题,在“反省”一词上加上了引号,以防万一,我将尽力更好地解释我的意图。

我有一个类型的实例,该实例是具有某些已知方法的某种抽象类型的子类。我想在运行时获取一个String,其中包含实例类型中此类方法之一的实际实现的源代码。

我认为值得指出的是,实例的实际类型可能是一个匿名的内部类…。另外,源代码的“反编译”版本也足够好。在大多数情况下,我想获取源代码的方法只有一行....

谢谢。


问题答案:

正如其他人指出的那样:不。

您可以按照JVM的方式访问类的对象,其方法等。这仅是可能的,因为每个类在编译时都会存储有关其自身及其成员的信息。

如果我不得不猜测,这会发生在继承树中的根对象Object中。您可以使用反编译器反编译类文件并将其用于检查。但是您不能访问源代码,例如String或类似的东西。

想想看:如果您已经为JVM编译了scala代码,那么您也无法找回该scala代码。而且您无法获取Java代码。

您要这样做有什么特殊原因吗?可能有其他尝试实现目标的方法吗?

问候



 类似资料:
  • 要 动态获取一个对象方法的信息,首先需要通过下列方法之一创建一个 类型的对象或者数组。 getMethods() getMethods(String name,Class<?> …parameterTypes) getDeclaredMethods() getDeclaredMethods(String name,Class<?>...parameterTypes) 如果是访问指定的构造方法,需要

  • 为了能够 动态获取对象构造方法的信息,首先需要通过下列方法之一创建一个 类型的对象或者数组。 getConstructors() getConstructor(Class<?>…parameterTypes) getDeclaredConstructors() getDeclaredConstructor(Class<?>...parameterTypes) 如果是访问指定的构造方法,需要根据该构

  • 我在使用reflections api的公共类中的私有类中使用私有方法时遇到问题。下面是一个简化的代码示例: 同样,我希望能够实例化一个类对象,然后从私有类调用。我一直试图通过反射来做到这一点,但我似乎无法超过1级。此外,内部类可能有也可能没有大多数代码似乎使用的构造函数。上面的代码只是框架。 我当前的代码: 我查找了各种方法来获取内部类或私有方法,但找不到在不使用构造函数的情况下将外部对象获取到

  • 问题内容: 我不明白“无法​​访问的代码”是什么意思? 在我的代码的最后一行中,它表示无法访问的代码。 } 问题答案: 这里的循环: 解析为,因为从未修改过的值。因此,(在您的情况下)之后出现的任何代码均被视为 无法访问 。

  • JDK11+spring批处理 有人知道那些警告是什么意思吗: 警告:发生了非法的反射访问操作警告:org.springframework.cglib.core.reflectutils$1(jar:file:/users/boru/downloads/spcljr/build/libs/spcljr-0.0.1-snapshot.jar!/boot-inf/lib/spring-core-5.0

  • 我有以下代码来检索http和https的默认,它通过访问静态包作用域方法,在Java8中工作: 这在jigsaw的Java9中仍然是可能的,还是禁止以这种方式修改可见性?