泛型是棘手的.
看起来它们在不同版本的
Java中被区别对待.
此代码在Java 7中成功编译,无法使用Java 8进行编译.
import java.util.EnumSet;
public class Main {
public static void main(String[] args) {
Enum foo = null;
tryCompile(EnumSet.of(foo));
}
static & Another> void tryCompile(Iterable i) {}
static interface Another {}
}
/tmp/java_A7GNRg/Main.java:6: error: method tryCompile in class Main cannot be applied to given types;
tryCompile(EnumSet.of(foo));
^
required: Iterable
found: EnumSet
reason: inferred type does not conform to upper bound(s)
inferred: Enum
upper bound(s): Enum,Another
where C is a type-variable:
C extends Enum,Another declared in method tryCompile(Iterable)
/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 declared in method of(E)
1 error
1 warning
问题是关于Java编译器版本之间的差异.