2

私はJasminコードにコンパイルし、それをアセンブルして、Java から Java バイトコードへのコンパイラを作成しています。ソースコードファイルがJavaライブラリクラスを参照して使用できるようにすることを意図して作成しています(文字列、印刷などにはほとんど必要です)。私の問題は、これをどのように行うかです。

ここまでは、Java インストール フォルダー内のテキスト ファイルに保持されているすべてのライブラリ クラスのリストへの参照を使用してきました (パッケージと名前がリストされているだけです)。パーサー/タイプ チェッカーのコーディングに使用しましたが、ライブラリ クラスが使用されたときにタイプ チェッカーがタイプ チェックを実行できなかったため、これは理想的とは言えませんでした。

ライブラリ クラスのメソッドを呼び出したい場合は、完全なメソッド シグネチャ (私がアクセスできないもの) を指定する必要があるため、コード生成に取り組んでいるので、これは本当に問題です。

どのように進歩するかについて人々のアドバイスが何であるかをさまよっていました。1 つの方法は、すべてのクラスを調べて、すべてのパラメーターと戻り値の型のデータベース/リストを作成することです。これは明らかに非常に時間がかかり、おそらくあまりにも非現実的です。他のよりエレガントなアプローチが可能ですか?

ありがとう、ウィル

PS私はこれをコーディングするためにPythonを使用しています。ソリューションで Java コードを使用する必要がある場合は、それをサブプロセスとして実行できると思います。

4

2 に答える 2

0

これをさらに詳しく調べると、JavaReflectionを使用することで可能になる可能性があります。この投稿に返信して、私がどれほど成功したかをお知らせします。

于 2012-02-26T22:29:34.460 に答える
0

Java からバイトコードへのコンパイラーは既に存在します。そしてJVM Python。あなたの本当の目標は何ですか?

メソッド/戻り型のコレクションを作成するのに「非常に時間がかかる」と思う理由は何ですか? 「非常に」とはどのくらい時間がかかりますか? これは実際にどのように機能するかのようなものであり、クラス ファイルからその情報を引き出すのに特に時間はかかりませんjavap。それ以外には、ASM、BCEL、および.classファイルから直接情報を取得するための他のいくつかのライブラリがありますがjavap、単純なテキスト出力を提供し、ニーズに適している可能性があります。

シンボルを使用するには、シンボル テーブルが必要です。利用可能なものを取得する唯一の方法は、利用可能なものを保存することです。特に簡略表記を使用する場合は、思ったよりも高速で小さいです。

于 2012-02-14T20:58:00.000 に答える