我担心答案是否定的,但也许你们其中一个让我感到惊讶。
感谢。
编辑1: 我知道这个问题没有多大意义,但我认为这一点已被理解,遗憾的是答案是否定的。无论如何,我改变了问题的标题,在“反思性”一词中添加了引号,我将尽力更好地解释我的意图。
我有一个类型的实例,它是某种抽象类型的子类,它有一些已知的方法。我希望在运行时获得一个String,其中包含实例类型中此类方法之一的实际实现的源代码。
我认为值得指出的是,实例的实际类型可能是一个非常内在的类.... 另外,源代码的“反编译”版本就足够了。我想要获取源的方法大多数时间只有一行....
感谢。
答案 0 :(得分:5)
正如其他人指出的那样:不。
您可以像JVM一样访问类的对象,方法等。这是唯一可能的,因为每个类在编译时都会存储有关自身及其成员的信息。
如果我不得不猜测,这发生在对象中,即继承树中的根对象。您可以使用反编译器反编译该类文件并使用该文件进行检查。但是您无法像String或类似的东西那样访问源代码。
考虑一下:如果你有为JVM编译的scala代码,你也无法获得scala代码。你不能得到java代码。
你有什么特别的理由要这么做吗?可能有任何其他方式可以尝试实现您的目标,无论它可能是什么?
问候
答案 1 :(得分:4)
不,你不能。它有点不合逻辑。
答案 2 :(得分:3)
我不这么认为。编译.java
后,它变为.class
;据我所知,Java没有内置的反编译器将.class
转换回.java
。可运行的应用程序知道的所有内容都是.class
个文件。