Java Generics: вывод параметров типа вопроса в Java - PullRequest
0 голосов
/ 23 октября 2018

Я изучаю концепцию дженериков на Java.

В этой конкретной строке -> class User<T extends List<U>, U>, есть ли причина, по которой java принудительно задает параметр второго типа U в определении параметра класса, когда первый параметр сам определяет T<U> или существует ярлыкчто мне не хватает

Телефонный код внутри магистрали:

    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 голосов
/ 23 октября 2018

Когда вы объявляете параметр типа 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) {
        //...
    }
}

(вместо него можно просто использовать TU для типа элемента списка.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...