2011-08-25 5 views
5

私はMockitoを使って引数を取得しようとしています。この引数の型はList<MyClass>です。しかし、私はそれを指定するための適切な構文を見つけることができません。モックするジェネリックインターフェイスのクラスを指定する

ArgumentCaptor<MyClass> captor = 
    ArgumentCaptor.forClass(MyClass.class); 

をしかし、私はこのをコンパイルするために取得していない:

私はこれを行うことができます

ArgumentCaptor< List<MyClass> > captor = 
    ArgumentCaptor.forClass(List<MyClass>.class); 

方法はありますか?

+0

可能複製(http://stackoverflow.com/questions/5606541/how-to-capture-a-list-of- [mockitoと特定のタイプのリストをキャプチャする方法]特定タイプの-Mockito) – xtofl

答えて

4

残念なことに、.classClass<List>オブジェクトのみを返します。Listは生タイプです。実装は完全ではなく、ネストされた型情報は.classを使用して取得できません。 List<Foo>.classのようなものは、そのようなClass<List<Foo>>オブジェクトがどこにも存在しないため、無効な構文です。

+0

「実装は完璧ではありません」とはどういう意味ですか? – xtofl

+0

私は言語のジェネリックの実装を指していました。 –

+0

:)私はそれに同意することはできません(C++に甘んじられています) – xtofl

3

これは、Javaがパラメータ化されたクラスの型を静的に決定しないためだと思います。

これはコンパイルできないのと同じ方法:型解決の問題Listの上などでもない

Class<?> c1 = ArrayList<String>.class; 

そして、これはインターフェイスです:

Class<?> c2 = List<String>.class; 

しかし、これはコンパイルん、とのことができます。おそらく同様のことをしてください:

public class MyList implements List<String> { 
    ... the List's methods to implement ... 
} 

// and later in the code: 

Class<?> c3 = MyList.class; 
14

@Captor注釈:

@Captor 
    private ArgumentCaptor<ArrayList<SomeType>> captor; 
+1

ありがとうございました。 「MockitoAnnotations.initMocks(this);」ということに注意してください。必要です。 (http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Captor.htmlも参照してください) –

関連する問題