2

私たちのプロジェクトの 1 つで、次のコード行に出くわしました (hamcrest マッチャー 1.3 を使用しています)。

assertThat(someReport.getSomeException(), Matchers.<SomeException>notNullValue())

2 つの質問:

  1. 誰かが私にこの構文を説明してくれませんか? その文脈で < と > が使われているのを見たことがありません。

  2. Eclipse は、その行の後半部分を en error: として強調表示しますThe method notNullValue() of type Matchers is not generic; it cannot be parameterized with arguments <SomeException>。ただし、コマンドラインで maven を使用すると、プロジェクトは問題なくビルドされます。では、なぜエラーが発生するのでしょうか。

4

1 に答える 1

3
  1. これは、静的メソッドを呼び出すときにジェネリック パラメーターを指定するための適切な構文です。次の方法がある場合...

    public T myMethod();

として呼び出すことができますMyClass.<String>myMethod()。多くの場合、型推論では<>. たとえば、上記の作業作業: String myVal = MyClass.myMethod().

  1. の javadoc にMatchersは、次の署名がありますnotNullValue

    public static Matcher notNullValue()

はジェネリック変数<T>ではないため、指定するのは適切ではないことに注意してください。コンパイル中の場合は、コンパイラが無視しているためだと思います。

于 2013-06-11T11:47:35.903 に答える