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プログラムは独自のソースコードにアクセスできますか?

一般的にはありません。ソースコードは通常、実行プラットフォームでは利用できません。

ソースコードが利用可能なサブケースでは、はい(もちろん)プログラムは標準のJava I /OAPIを使用してソースコードを読み取ることができます。ただし、ソースコードを読み取るタスクに固有の標準APIはありません。

...主にデバッグ目的(実行時にメソッドシグネチャを出力する、プログラムが独自のコメントを読み取れるようにする、Javaクラスが特定のタイプのすべてのメソッドを出力できるようにするなど)

これらのことができなかった技術的な理由はありませんが、そのようなツールが役立つようになるまでには、多くの作業が必要になると思います。そして、率直に言って、典型的なJava IDEのソースコードデバッガーは、これらのほとんどすべてをすでに実行しているので、その努力のポイントは実際にはわかりません。

于 2012-10-01T04:11:26.417 に答える
0

ASMをチェックしましたか?http://asm.ow2.org/

しかし、私はあなたがやろうとしていることは非常にCPUが高いと思います。

于 2012-10-01T04:40:47.430 に答える
0

理論的には、ソースコードで逆コンパイラライブラリを使用してクラスにアクセスできる可能性がありますが、最適化や難読化などにより、バイトコードとJavaコードの間で1対1の変換を確実に実行できない場合があることに注意してください。また、コードがデバッグ情報を組み込んでコンパイルされていない場合は、必ずしも行番号を使用できるとは限らないことにも注意してください。

于 2012-10-01T05:52:03.717 に答える