hamcrest matchers的语法

时间:2013-06-11 11:17:06

标签: java eclipse generics junit hamcrest

在我们的一个项目中,我偶然发现了以下代码行(它使用了hamcrest matchers 1.3):

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

两个问题:

  1. 请有人向我解释这个语法吗?我从未见过使用&lt;和&gt;在这种情况下。

  2. Eclipse将该行的后半部分突出显示为错误:The method notNullValue() of type Matchers is not generic; it cannot be parameterized with arguments <SomeException>。但是,在命令行上使用maven,项目构建没有问题。那么为什么会出错呢?

1 个答案:

答案 0 :(得分:3)

  1. 这是在调用静态方法时指定泛型参数的正确语法。如果您有以下方法......

    public T myMethod();

  2. 您可以将其称为MyClass.<String>myMethod()。在许多情况下,类型推断允许不包括<>。例如,上述工作:String myVal = MyClass.myMethod()

    1. Matchers的javadoc具有notNullValue的以下签名

      public static Matcher notNullValue()

    2. 请注意,它不是通用变量<T>,因此指定一个变量是不合适的。如果它正在编译,我认为这是因为编译器忽略它。