在我们的一个项目中,我偶然发现了以下代码行(它使用 hamcrest 匹配器 1.3):
assertThat(someReport.getSomeException(), Matchers.<SomeException>notNullValue())
两个问题:
有人可以向我解释一下这个语法吗?我从未见过在这种情况下使用 < 和 >。
Eclipse 将该行的后半部分突出显示为错误:
The method notNullValue() of type Matchers is not generic; it cannot be parameterized with arguments <SomeException>
。但是,在命令行上使用 Maven 可以毫无问题地构建项目。那么为什么会出现错误呢?
最佳答案
这是调用静态方法时指定泛型参数的正确语法。如果您有以下方法...
public T myMethod();
您可以将其称为 MyClass.<String>myMethod()
。在许多情况下,类型推断允许不包括 <>
。例如上面的工作:String myVal = MyClass.myMethod()
.
Matchers
的 javadocnotNullValue
具有以下签名公共(public)静态匹配器 notNullValue()
请注意,这不是通用变量 <T>
因此指定一个是不合适的。如果正在编译,我认为这是因为编译器忽略了它。
关于java - hamcrest 匹配器的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17042791/