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ターゲットの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を強制的に正しく動作させる方法はありますか?