我不明白为什么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)-而不是相反。

10-05 19:11