1

のパラメーターを持つものをプログラムで設定する必要がある状況がありますが、Class<? extends Annotation>このメソッドに Annotation クラスを渡す方法がわかりません。

たとえば、持っていjavax.persistence.Entityて試してみると、これらの引数には適用できないsetAnnotation(javax.persistence.Entity.class)というエラーが表示されます。Class<Entity>ただし、それは@interface属性を持つクラスです。それは明らかに注釈です。何が間違っているのでしょうか? また、値を適切に送信するにはどうすればよいですか?

この理由は、Spring XML 構成から class に移行するため@Configurationです。xml ファイルでこれを行うのは簡単です。

<property name="annotation" value="javax.persistence.Entity" />

しかし、それを機能させるためにSpringが何をしているのかわかりません。

public class Stuff {
    private List<Class<? extends Annotation>> annotations;

    public List<Class<? extends Annotation>> getAnnotations() {
        return annotations;
    }

    public void setAnnotations(List<Class<? extends Annotation>> annotations) {
        this.annotations = annotations;
    }
}

public class StuffTest {


    @Test
    public void test() {

        new Stuff().setAnnotations(Collections.singletonList(javax.persistence.Entity.class));
        // this does not compile
    }
}

編集:

List list = new ArrayList();
list.add(javax.persistence.Entity.class);
stuff.setAnnotations(list);

動作しますが、より良い方法はありますか?

4

1 に答える 1

2

これは私のために機能する API です (Eclipse と javac コンパイラの両方を使用):

public void setAnnotations(
  Collection<? extends Class<? extends Annotation>> annotations) {

もちろん、これは、Stuffそれ自体の内部動作の一部を変更する必要があることを意味します...

aではなく aを返すので、Collection引数の型にも注意してください。たぶん、代わりに a を使用するつもりでしたか?Collections.singleton()SetListCollections.singletonList()

于 2012-05-10T11:33:26.973 に答える