-1

プログラムのユーザーがクラス内のクラスとメソッドの名前を変更できるようにしようとしています。新しい名前は実行時に読み込んで構成でき、Java Script Engine を使用してスクリプト言語でこれらのクラスとメソッドを呼び出します。新しい名前をクラスとメソッドの実際の名前にバインドする方法が必要です。Reflection を検討してきましたが、これで必要な機能が得られるとは思いませんか、それとも可能でしょうか?

元:

public class RealName {
    public void printHello() {
        System.out.println("Hello");
    }
}

それからおそらくPaythonで言う

obj = new NewName()
obj.hello()

これが不可能かどうか教えてください!

4

2 に答える 2

1

メソッド名を変更することはできませんが、オブジェクトのインスタンスを特定の名前にバインドし、それをスクリプト言語のコンテキストに挿入することができます。

これは、新しいインスタンスのインスタンス化ではなく、クラスのそのインスタンスに対してのみ機能します。

本当にこれが必要な場合は、ターゲット スクリプト言語で新しい名前とメソッド名を持つサブクラスを生成し、それらをコンテキストに挿入して、探している効果を得ることができます。

とは言っても、これを行う正当な理由を思い付くことはできません。

于 2014-06-25T13:35:49.360 に答える
0

私が見つけたものから私の質問に答えるには、リフレクションを使用してクラスを新しい名前にバインドすることはできません。実際、動的な名前変更を行う簡単な方法は見つかりませんでした。

これを克服するために私がしたことは、文字列からファイルにコードを書き、そのファイルを拡張子 で保存し、そのファイルを.javaコンパイルしてから、リフレクションで使用するか、Java ScriptEngine API を使用してスクリプト内で使用することでした (そうすれば、見苦しいリフレクション コードを回避し、実際にすべてを動的かつオンザフライで実行します)。

ファイルを作成するための出発点は次のとおりです。

動的インメモリ コンパイル

そして、これは Java をスクリプト化するためのものです。

Java のスクリプト

于 2014-07-16T02:06:48.220 に答える