java - hamcrest 匹配器的语法

标签 java eclipse generics junit hamcrest

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

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

两个问题:

  1. 有人可以向我解释一下这个语法吗?我从未见过在这种情况下使用 < 和 >。

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

最佳答案

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

    public T myMethod();

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

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

    公共(public)静态匹配器 notNullValue()

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

关于java - hamcrest 匹配器的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17042791/

相关文章:

java - 执行多个 if else 语句的更有效方法

android - 将 Google-Play-Services 添加到图书馆项目

c# - 什么是最快的通用集合?

java - 无响应的actor系统: ThreadPoolExecutor dispatcher only creates core thread pool,显然会忽略最大线程池大小

java - 在这个包结构中,在哪里放置 Reader/Writer/Emailer ... *er 类?

java - 如何在Java中的字段中存储变量类型的对象?

eclipse - 插件执行所需的项目配置器 "EnableJdtAptM" "maven-compiler-plugin:3.1:compile"不可用

eclipse 中的 c++ makefile 项目 - select() 在 stdin 中返回速度异常快

带有newInstance的java泛型类型参数

java - OptionalInt 与 Optional<Integer>