在我们的一个项目中,我偶然发现了以下代码行(它使用了hamcrest matchers 1.3):
assertThat(someReport.getSomeException(), Matchers.<SomeException>notNullValue())
两个问题:
请有人向我解释这个语法吗?我从未见过使用&lt;和&gt;在这种情况下。
Eclipse将该行的后半部分突出显示为错误:The method notNullValue() of type Matchers is not generic; it cannot be parameterized with arguments <SomeException>
。但是,在命令行上使用maven,项目构建没有问题。那么为什么会出错呢?
答案 0 :(得分:3)
这是在调用静态方法时指定泛型参数的正确语法。如果您有以下方法......
public T myMethod();
您可以将其称为MyClass.<String>myMethod()
。在许多情况下,类型推断允许不包括<>
。例如,上述工作:String myVal = MyClass.myMethod()
。
Matchers
的javadoc具有notNullValue
的以下签名
public static Matcher notNullValue()
请注意,它不是通用变量<T>
,因此指定一个变量是不合适的。如果它正在编译,我认为这是因为编译器忽略它。