2012-05-10 2 views
1

パラメータがClass<? extends Annotation>のプログラムで設定する必要がある状況がありますが、このメソッドにAnnotationクラスを渡す方法がわかりません。クラス<のパラメータを持つメソッドに有効なクラスを提供するにはどうすればよいですか? Annotation>を拡張しますか?

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

私はSpringのXML設定からクラス@Configurationに向かいます。

<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); 

作品が、良い方法はありますか?

+0

SSCCEを投稿できますか?上記のシナリオはうまくいくはずです。 – Perception

+0

確かに、いくつか教えてください。私は実際のシナリオがこれらのリストであることに注意しなければならないが、それがどのように問題を複雑にするかわからない。 – AHungerArtist

+0

@Perceptionが追加されました – AHungerArtist

答えて

2

これは私の作品API(両方のEclipseとjavacコンパイラを使用して)です:もちろん

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

、これはあなたがStuff自体の内部の仕組みの一部を変更する必要があると思います意味します。 ... Collections.singleton()戻りSet、ないListとしても

Collection引数の型、。たぶん代わりにCollections.singletonList()を使用するつもりでしたか?

+0

私は型を変更することができないので、タイプのないリストを使用する必要がありますが、これは正しいアプローチであり、私はそれを受け入れます。 – AHungerArtist

関連する問題