在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
}
}
答案 0 :(得分:2)
您可以直接访问代码中的.java文件。只需将其指向正确的目录并像访问其他任何目录一样访问该文件。
程序没有运行java文件本身,而是在运行时使用编译文件。
答案 1 :(得分:1)
我正在尝试设置每个方法的属性
我建议您使用注释,然后使用Method.getAnnotation
答案 2 :(得分:0)
Java程序可以访问自己的源代码吗?
一般没有。源代码通常在执行平台上不可用。
在源代码可用的子案例中,是(当然)程序可以使用标准Java I / O API读取它。但是,没有专门用于阅读源代码任务的标准API。
...主要用于调试目的(例如在运行时打印方法签名,或允许程序读取自己的注释,或允许Java类打印某种类型的所有方法)
没有技术上的原因可以解释为什么你不能做这些事情,但是在这样的工具达到有用之前你会有很多工作要做。而且,坦率地说,典型的Java IDE的源代码调试器已经完成了所有这些事情,所以我并没有真正看到这一点。
答案 3 :(得分:0)
您检查过ASM吗? http://asm.ow2.org/
但我认为,你要做的事情是非常昂贵的。
答案 4 :(得分:0)
理论上,您可以在源代码中使用反编译器库来访问类,但请记住,由于优化和/或混淆等原因,您可能无法在字节码和字节码之间进行1-1转换。 Java代码。另请注意,如果代码未使用内置的调试信息进行编译,您甚至不一定能够使用#行。