我正在学习Java中的泛型概念。
在这一行-> class User<T extends List<U>, U>
中,当第一个参数本身定义U
时,还是java在类参数定义中强制第二种类型的参数T<U>
是有原因的?那是我所缺少的捷径。
在main内部调用代码:
User<List<Integer>, Integer> u = new User<>("some_user", 21, l);
System.out.println(u.getDetails());;
班级:
class User<T extends List<U>, U> {
private String name;
private int age;
private T details;
public User(String name, int age, T details) {
super();
this.name = name;
this.age = age;
this.details = details;
}
}
答案 0 :(得分:4)
当您声明类型参数T
具有上限List<U>
时,您尚未定义类型参数U
,因此没有声明{{1} }它没有定义。
您可以按照自己的方式做-再次声明U
:
U
或者您可以先声明它(顺序无关紧要):
class User<T extends List<U>, U> {
但是,除非您确实需要class User<U, T extends List<U>> {
的特定类型,否则我将删除该类型参数,并专注于元素的类型。
List
(对于列表元素类型,您始终可以只使用class User<U> {
//...
private List<U> details;
public User(String name, int age, List<U> details) {
//...
}
}
而不是T
。)