Java 泛型:定义泛型时的通配符和类型参数语法 class

Java generics : wildcard and type parameter syntax when defining generic class

在下面的泛型方法声明示例中,我认为这两个方法声明是相同的,因为它们接受相同类型的参数。

public static <T extends List<? extends Number>> void fun(T arg){}
public static void foo(List<? extends Number> arg){}

好的,那为什么不允许使用以下语法来定义泛型 class?

public class foo<List<? extends Numer>> {}

按照oracle的Java教程,是不是因为我只能用语法class name<T1, T2, ..., Tn> { /* ... */ }来定义泛型classes? Java 还提供额外的语法糖来定义泛型方法?

所以,如果我想定义一个像public class foo<T extends List<U extends Number>>这样的泛型class来利用TU,我只能通过以下方式来实现: public class foo<U extends Number, T extends List<U>>?有没有简洁的方法可以做到?

谢谢!

根据您的初衷...以下是有效的泛型 class

public class MyClass<T extends List<? extends Number>> {}

可以如下使用...

public class MyClass<T extends List<? extends Number>> {
    T myList;

    public T getMyList() {
        return myList;
    }

    public void setMyList(T myList) {
        this.myList = myList;
    }
}

public class Tester {
    public Tester() {
        MyClass<ArrayList<Number>> list = new MyClass<>();
        list.setMyList(new ArrayList<>());
        list.getMyList().add(new Integer(2));
        list.getMyList().add(new Long(3));
    }
}