Когда вы объявляете параметр типа 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) {
//...
}
}
(вместо него можно просто использовать T
U
для типа элемента списка.)