1

在 Java 中,我想找到一种允许程序访问自己的源代码的方法,主要用于调试和元编程目的(例如在运行时打印方法签名,或允许程序读取自己的注释,或允许一个 Java 类来打印某种类型的所有方法,或者允许程序生成它自己的源代码的新版本等)。

有没有办法让 Java 程序访问它自己的源代码的副本,并逐行读取它?

//this is the first line of the program
//this method is not implemented
public class inspectSourceCode(){
    public static String getLine(int lineNumber){
        //get the line of the program's own source code as a string,
        //this is not currently implemented
    }
    //this method is implemented
    public static void main(String[] args){
        System.out.println(getLine(0));
        //should print "//this is the first line of the program",
        //if the method getLine works correctly
    }
}
4

5 回答 5

2

您可以直接访问代码中的 .java 文件。只需将其指向正确的目录并像访问其他文件一样访问该文件。

该程序本身并未运行 java 文件,而是在运行时使用已编译的文件。

于 2012-10-01T04:01:27.747 回答
1

我正在尝试设置每种方法的属性

我建议您使用注释,然后使用Method.getAnnotation

于 2012-10-01T04:50:29.163 回答
0

理论上,您可以在源代码中使用反编译器库来潜在地访问类,但请记住,由于优化和/或混淆等原因,您可能无法可靠地在字节码和 Java 代码之间进行 1-1 转换。还要记住,如果代码没有使用内置的调试信息编译,您甚至不一定有可用的 #s 行。

于 2012-10-01T05:52:03.717 回答
0

你检查过 ASM 吗?http://asm.ow2.org/

但我认为,你想要做的是非常昂贵的 CPU。

于 2012-10-01T04:40:47.430 回答
0

Java 程序可以访问自己的源代码吗?

一般来说没有。源代码通常在执行平台上不可用。

在源代码可用的子情况下,是的(当然)程序可以使用标准 Java I/O API 读取它。但是,没有专门用于读取源代码任务的标准 API。

...主要用于调试目的(例如在运行时打印方法签名,或允许程序读取自己的注释,或允许 Java 类打印某种类型的所有方法)

你不能做这些事情没有技术原因,但让我感到震惊的是,在这样的工具变得有用之前,你还有很多工作要做。而且,坦率地说,一个典型的 Java IDE 的源代码调试器已经完成了几乎所有这些事情,所以我真的不明白这种努力的意义。

于 2012-10-01T04:11:26.417 回答