1

私のアプリケーションでは、開発者がいくつかのプラグインを作成できます。基本抽象クラスによって決定される要件への準拠。各プラグインには名前が必要です。注釈を使用してこの問題を解決したいと考えています。そこで、独自のアノテーション Name を次のように定義しました。

@Retention(RetentionPolicy.RUNTIME)
public @interface Name {
public String value();
}

この注釈と基本抽象クラス CommonPlugin を別のモジュールに入れ、JAR ファイルとしてビルドして開発者と共有します。

次に、パッケージをインポートし、次のように me test プラグインの定義の前にこの注釈を付けます。

@Name("Test plugin")
public class TestPlugin extends CommonPlugin {

次に、指定されたすべてのプラグインを反映しURLClassLoader、TestPlugin クラスで必要なアノテーションを見つけることができません。しかし、TestPlugin クラスと同じパッケージに Name アノテーションを定義すると、それを見つけることができます。そうあるべきですか、それとも何か間違っていますか?

4

1 に答える 1

1

私のコメントを回答に変えて、受け入れられるようにします。

Name非修飾名が、すべてのソース ファイルで同じ修飾名を参照していることを確認してください。注釈を含むパッケージとは異なるパッケージのソースでは、 の非ワイルドカード インポートNameが必要であり、他のパッケージ自体にその名前のクラスが存在しない必要があります。

于 2012-08-02T11:30:56.493 に答える