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

在Java中,是否可以“反射式”访问方法的源代码?,java,reflection,Java,Reflection,恐怕答案是否定的,但也许你们中的一位让我感到惊讶 谢谢 编辑1: 我知道这个问题没有多大意义,但我认为这一点已被理解,不幸的是,答案是否定的。无论如何,我改变了问题的标题,在单词中添加了引号,我会尽量更好地解释我的意图,以防万一 我有一个类型的实例,它是一个抽象类型的子类,它有一些已知的方法。我想在运行时获取一个字符串,其中包含实例类型中此类方法的实际实现的源代码 我认为值得指出的是,实例的实际类型可能是一个匿名的内部类。。。。 而且,反编译版本的源代码已经足够好了。大多数情况下,我想要获取源代

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

谢谢

编辑1: 我知道这个问题没有多大意义,但我认为这一点已被理解,不幸的是,答案是否定的。无论如何,我改变了问题的标题,在单词中添加了引号,我会尽量更好地解释我的意图,以防万一

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

我认为值得指出的是,实例的实际类型可能是一个匿名的内部类。。。。 而且,反编译版本的源代码已经足够好了。大多数情况下,我想要获取源代码的方法只有一行


谢谢。

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

不,你不能。这也有点不合逻辑。

正如其他人所指出的:不

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

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

想想看:如果您为JVM编译了scala代码,那么您也无法取回scala代码。您无法获得java代码

你想这样做有什么特别的原因吗?有没有其他方法可以让你实现你的目标,不管是什么


这个问题本身没有多大意义。假设答案是肯定的,你打算用它做什么?如果你能澄清你的意图,也许你会得到更好的答案。我的用例是解析web服务的带注释的集成测试方法,并使用该方法的源来构建动态文档。我认为这可能有助于保护软件免受黑客攻击,或者至少添加另一层保护,我们可以检查原始代码是否被修改。为什么不可能?如果有.jar反编译器工作得非常好,并且使破解程序更容易…实际上我正在编写Scala代码:。我将这个问题表述为Java问题,因为我认为这是一个更一般的问题。我的用例是一个方法,它获取一些函数作为参数,我想在方法内部获取报告所需的实际函数的文本。。。如果您有源代码,您可以尝试自己解析它。我认为一个定义良好的正则表达式可以得到一个方法的主体。但您需要使用javad对其进行反编译,例如。。。你可以用一个脚本或者一些java/scala代码来完成……我想我会这样做。我将在这里发布结果。谢谢