Java泛型:Java中的问题类型参数推断

时间:2018-10-23 00:57:38

标签: java generics

我正在学习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;
}

}

1 个答案:

答案 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。)