I farmaci generici sono difficili. E sembra che siano trattati in modo diverso nelle diverse versioni di Java.Perché compila in Java7 e non in Java8?
Questo codice viene compilato con successo in Java 7 e non riesce a compilare con Java 8.
import java.util.EnumSet;
public class Main {
public static void main(String[] args) {
Enum foo = null;
tryCompile(EnumSet.of(foo));
}
static <C extends Enum<C> & Another> void tryCompile(Iterable<C> i) {}
static interface Another {}
}
Ecco un messaggio di errore da Java 8. Ho usato questo per compilarlo: http://www.compilejava.net/
/tmp/java_A7GNRg/Main.java:6: error: method tryCompile in class Main cannot be applied to given types;
tryCompile(EnumSet.of(foo));
^
required: Iterable<C>
found: EnumSet
reason: inferred type does not conform to upper bound(s)
inferred: Enum
upper bound(s): Enum<Enum>,Another
where C is a type-variable:
C extends Enum<C>,Another declared in method <C>tryCompile(Iterable<C>)
/tmp/java_A7GNRg/Main.java:6: warning: [unchecked] unchecked method invocation: method of in class EnumSet is applied to given types
tryCompile(EnumSet.of(foo));
^
required: E
found: Enum
where E is a type-variable:
E extends Enum<E> declared in method <E>of(E)
1 error
1 warning
La domanda riguarda la differenza tra le versioni del compilatore Java.
Di cosa si lamenta Java 8? – MadProgrammer
In effetti, l'errore di compilazione in Java 8 * dovrebbe * spiegare perché non si sta compilando. E molto probabilmente ... –
Cosa ti aspetti da questo codice? Inoltre, il tuo 'Enum' è un tipo grezzo. –