c'è un metodo nella hamcrest libreria:Per il metodo di tipo T, quale dovrebbe essere il tipo "inferito" quando sono necessari due argomenti <? super T>?
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);
}
Nel mio codice, io chiamo questo metodo con first
essere Matcher<Object>
e second
essere Matcher<SomeException>
.
E ora:
- Quando compilo con Eclipse con 1.6 di destinazione, fa
<T>
Matcher<SomeException>
. - Quando lo compilo con javac 1.7 con 1.6 target, rende
<T>
Matcher<SomeException>
. - Quando compilo con javac 1.6 con 1.6 di destinazione, rende
<T>
Matcher<Object>
La domanda è: cosa <T>
dovrebbe essere in tal caso?
La mia comprensione è che c'è un bug in javac 1.6 e dovrebbe essere Matcher<SomeException>
, in quanto questo è un tipo comune di argomenti di input (SomeException è un sottotipo di Object) e poi, è sicuro al 100%, che ha restituito Il matcher sarà Matcher<SomeException>
.
Ho ragione? E c'è un modo per forzare javac 1.6 a comportarsi correttamente?
Buona cattura con CoreMatcher, ma è CoreMatchers nel mio hamcrest :) Per quanto riguarda il 2 ° punto - Lo so. Sono stato in grado di compilare con eclipse ed eseguire quindi il test mvn. – Marcin