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);
}
私のコードでは、firstbeingMatcher<Object>とsecondbeingを使用してこのメソッドを呼び出しますMatcher<SomeException>。
そして今:
- 1.6ターゲットのEclipseでコンパイルすると、になります
<T>Matcher<SomeException>。 - 1.6ターゲットのjavac1.7でコンパイルすると、になります
<T>Matcher<SomeException>。 - 1.6ターゲットのjavac1.6でコンパイルすると、
<T>Matcher<Object>
問題は、<T>そのような場合はどうあるべきかということです。
私の理解では、javac 1.6にはバグがありMatcher<SomeException>、これは入力引数の一般的なタイプであり(SomeExceptionはObjectのサブタイプです)、返されるマッチャーがになることは100%確実Matcher<SomeException>です。
私は正しいですか?そして、javac 1.6を強制的に正しく動作させる方法はありますか?