我正在学习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;
}
}
发布于 2018-10-23 09:02:08
当您声明类型参数T
有一个上限List<U>
时,您还没有定义类型参数U
,所以如果没有声明U
,就不会定义它。
您可以像您所做的那样--声明U
second:
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) {
//...
}
}
(对于list元素类型,您始终可以使用T
而不是U
。)
https://stackoverflow.com/questions/52939647
复制相似问题