我刚刚写了一个简单的 JUnit Matcher
,当然assertThat()
它需要Generics。
幸运的是,我找到了返回类型的正确语法static <T>Matcher not(Matcher<T> m)...
,尽管我不明白为什么
- 在返回类型中它
<T>Matcher
和 - 在参数列表中
Matcher<T>
为什么它<T>Matcher
在返回类型中?这背后的概念是什么?
我来自 C++,可以很好地处理它的模板。我知道泛型的工作方式不同,但这就是为什么这让我感到困惑。
这是我自己的Matcher
课。看看静态助手not
:
import org.hamcrest.*;
/** assertThat(result, not(hasItem("Something"))); */
class NotMatcher<T> extends BaseMatcher<T> {
/** construction helper factory */
static <T>Matcher not(Matcher<T> m) { //< '<T>Matcher' ???
return new NotMatcher<T>(m);
}
/** constructor */
NotMatcher(Matcher<T> m) { /* ... */ }
/* ... more methods ... */
}