1

ユーザーが独自のクラスを作成してコンパイルし、プログラムを使用できるように、実行時に extcos を使用してインターフェイスの実装を動的にリンクしようとしています。ただし、クラスの抽出に問題があります。このようなクラスを操作するのは私の頭を悩ませていますが、extcos がほとんどの作業を行っているようです。

プログラムがメインに入ると同時にクラスをロードしようとします。ここに私がそこにあるものがあります:

    final Set<Class<? extends IAlgorithm>> classes = new HashSet<Class<? extends IAlgorithm>>();

    ComponentScanner scanner = new ComponentScanner();
    scanner.getClasses(new ComponentQuery() {
        @Override
        protected void query() {
            select().
            from("logic").
            andStore(thoseImplementing(IAlgorithm.class).into(classes)).
            returning(none());
        }
    });

IAlgorithm の実装でインスタンスがメソッドを呼び出すようにするにはどうすればよいですか?

http://sourceforge.net/projects/extcos/

4

1 に答える 1

1

extcos はわかりませんが、ロードされたクラスのオブジェクトがclasses含まれているように見えます。java.lang.Class<?>これらのクラスのインスタンスを作成できるはずです

IAlgorithm ia = classes.iterator().next().newInstance();

引数なしのコンストラクターの場合。または、デフォルト以外のコンストラクターを呼び出す必要がある場合:

Class<? extends IAlgorithm> cls = classes.iterator().next();
Constructor<? extends IAlgorithm> c = cls.getConstructor(...);
IAlgorithm ia = c.newInstance(...);

where...は、上記の最初と 2 番目の使用法におけるコンストラクターの引数の型と値をそれぞれ表します。

于 2012-05-23T04:28:17.280 に答える