在Java中,是否可以“反射性地”访问方法的源代码?

2022-09-03 15:27:04

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

谢谢。

编辑 1:我知道这个问题没有多大意义,但我认为这一点被理解了,可悲的是,答案是否定的。无论如何,我更改了问题的标题,在“反思性地”一词中添加了引号,我将尝试更好地解释我的意图以防万一。

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

我认为值得指出的是,实例的实际类型可能是一个无意义的内部类。此外,源代码的“反编译”版本就足够了。我想获取源代码的方法,大多数时候,只有一行....

谢谢。


答案 1

正如其他人所指出的:不。

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

如果我必须猜测,这发生在对象中,继承树中的根对象。您可以使用反编译器反编译类文件,并使用该反编译器进行检查。但是您不能像字符串或类似的东西一样访问源代码。

想想看:如果你有为JVM编译的scala代码,你也无法找回scala代码。而且你不能得到java代码。

有什么特殊原因要这样做吗?有没有其他方法可以尝试实现你的目标,无论它是什么?

问候


答案 2

我不这么认为。编译后,它将成为 ;据我所知,Java没有内置的反编译器来将其转换回.可运行的应用程序所知道的只是文件。.java.class.class.java.class