2

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

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

两个问题:

  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. 这是在调用静态方法时指定泛型参数的正确语法。如果你有以下方法...

    公共 T myMethod();

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

  1. javadocMatchers具有以下签名notNullValue

    公共静态匹配器 notNullValue()

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

于 2013-06-11T11:47:35.903 回答