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

时间:2009-10-13 21:43:03

标签: java reflection

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

感谢。

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

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

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

感谢。

3 个答案:

答案 0 :(得分:5)

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

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

如果我不得不猜测,这发生在对象中,即继承树中的根对象。您可以使用反编译器反编译该类文件并使用该文件进行检查。但是您无法像String或类似的东西那样访问源代码。

考虑一下:如果你有为JVM编译的scala代码,你也无法获得scala代码。你不能得到java代码。

你有什么特别的理由要这么做吗?可能有任何其他方式可以尝试实现您的目标,无论它可能是什么?

问候

答案 1 :(得分:4)

不,你不能。它有点不合逻辑。

答案 2 :(得分:3)

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