hamcrest 库中有一个方法:
package org.hamcrest.core
...
public static <T> Matcher<T> allOf(Matcher<? super T> first, Matcher<? super T> second) {
List<Matcher<? super T>> matchers = new ArrayList<Matcher<? super T>>(2);
matchers.add(first);
matchers.add(second);
return allOf(matchers);
}
在我的代码中,我用first
beingMatcher<Object>
和second
being 来调用这个方法Matcher<SomeException>
。
现在:
- 当我使用带有 1.6 目标的 Eclipse 编译它时,它会生成
<T>
Matcher<SomeException>
. - 当我使用带有 1.6 目标的 javac 1.7 编译它时,它会生成
<T>
Matcher<SomeException>
. - 当我使用带有 1.6 目标的 javac 1.6 编译它时,它使
<T>
Matcher<Object>
问题是,<T>
在这种情况下应该怎么做?
我的理解是,javac 1.6 中存在一个错误,它应该是Matcher<SomeException>
,因为这是输入参数的常见类型(SomeException 是 Object 的子类型),然后,100% 肯定返回的 Matcher 将是Matcher<SomeException>
.
我对吗?有没有办法强制 javac 1.6 正常运行?