为什么在Java Generics中将`<t> Type`作为返回类型而不是`Type <t>`?</t> </t>

时间:2013-05-07 15:15:08

标签: java generics return-type hamcrest

我刚为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 ... */
}

2 个答案:

答案 0 :(得分:11)

Towi我希望这个例子有所帮助。

enter image description here

以上插图是对问题标题的直接回复:为什么<T>Type作为Java Generics中的返回类型而不是Type<T>

在Towi的例子中还有几个额外的要点,请参阅评论追踪。

答案 1 :(得分:10)

你真的想要

static <T> Matcher<T>

您需要第一个'T'来声明泛型方法的类型。第二个'T'是Matcher类的类型参数。