6

これはコードです:

Map<Foo, String> map;
org.hamcrest.MatcherAssert.assertThat(map, 
  org.hamcrest.Matchers.hasKey(new Foo()));

これはコンパイラが言っていることです:

cannot find symbol method assertThat(java.util.Map<Foo,java.lang.String>,
org.hamcrest.Matcher<java.util.Map<Foo,java.lang.Object>>)

なぜ、何ができるのですか?

4

2 に答える 2

15

次のようなものが必要だと思います:

MatcherAssert.assertThat(map, Matchers.<Foo, String>hasKey());

hasKeyそうすれば、メソッド呼び出しの値の型を指定できます。お尻が醜く見えますが、型推論が役に立たないことに少し驚いています...

于 2011-07-28T21:36:02.240 に答える
7

私と同じバグに遭遇したようですね。これは Hamcrest > 1.1 ですか? 彼らはマッチャーのジェネリックを 1.1 と 1.2 の間で変更しました。ここでハムクレストのバグを報告しました: http://code.google.com/p/hamcrest/issues/detail?id=143

しかし、これは実際にはコンパイラのバグであり、JDK 6 では修正できませんが、7 ではすでに修正されていることが判明しました : =7034548

Jon が述べたように、これを回避する方法はいくつかありますが、それらはすべて、Hamcrest の素晴らしく流暢なインターフェースを壊してしまいます。

于 2011-07-28T22:16:42.807 に答える