我刚为Matcher
写了一个简单的JUnit assertThat()
,当然需要 Generics 。
幸运的是,我找到了static <T>Matcher not(Matcher<T> m)...
的返回类型的正确语法,虽然我不明白为什么
<T>Matcher
和Matcher<T>
为什么返回类型中有<T>Matcher
?这背后的概念是什么?
我来自C ++,可以很好地处理它的模板。我知道 Generics 的工作方式不同,但这就是为什么这让我感到困惑。
这是我自己的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 ... */
}
答案 0 :(得分:11)
Towi我希望这个例子有所帮助。
以上插图是对问题标题的直接回复:为什么<T>Type
作为Java Generics中的返回类型而不是Type<T>
?
在Towi的例子中还有几个额外的要点,请参阅评论追踪。
答案 1 :(得分:10)
你真的想要
static <T> Matcher<T>
您需要第一个'T'来声明泛型方法的类型。第二个'T'是Matcher类的类型参数。