我不明白为什么method2不能编译而method1可以编译。
我将Eclipse与JavaSE 1.7结合使用,在method2上收到以下错误:
public class Test {
public interface SomeInterface {
}
public static <T extends Enum<T> & SomeInterface> T method1() {
return null;
}
public static <T extends SomeInterface & Enum<T>> T method2() {
return null;
}
}
最佳答案
如果查看JLS 8.1.2中类型参数界限的语法,您将看到:
TypeBound:
extends TypeVariable
extends ClassOrInterfaceType {AdditionalBound}
AdditionalBound:
& InterfaceType
换句话说,只有指定的第一个类型可以是一个类-其余所有都必须是接口(interface)。
除了其他方面,这还可以防止指定多个类。
它也反射(reflect)了在声明一个类时,必须先将要扩展的类放到其后扩展,然后再实现其实现的接口(interface)-而不是相反。