在下面的泛型方法声明示例中,我认为这两个方法声明在接受相同类型的参数方面是相同的。
public static <T extends List<? extends Number>> void fun(T arg){}
public static void foo(List<? extends Number> arg){}
OK,那为什么不允许使用下面的语法来定义泛型类呢?
public class foo<List<? extends Numer>> {}
根据oracle的Java教程,是不是因为我只能使用语法class name<T1, T2, ..., Tn> { /* ... */ }
来定义泛型类?并且 Java 还提供了额外的语法糖来定义泛型方法?
所以,如果我想定义一个像public class foo<T extends List<U extends Number>>
使用T
and一样的泛型类U
,我只能通过以下方式来做到:public class foo<U extends Number, T extends List<U>>
? 有没有简洁的方法可以做到?
谢谢!
从您的原始意图...以下是一个有效的泛型类
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));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句