Множественные оценки параметров типа должны быть разделены с &
, а не ,
, например:
public static <T extends Number & Comparable<T>> void f(T n)
запятой используется для разделения деклараций параметров множественного типа , например:
public static <T extends Number & Comparable<T>, S extends Comparator<T>> void f(T n, S m)
В соответствии со спецификацией JLS может быть либо:
- a переменная типа;
- или класс или интерфейс, за которым следует один или несколько интерфейсов (и разделены
&
).
Поэтому это работает T extends Number & Comparable<T>
, и это не T extends Comparable<T> & Number
.
См: JLS § 4.4: Type Variables
AdditionalBound:
& InterfaceType
...
Каждый тип переменной, объявленной в качестве параметра типа имеет предел. Если для переменной типа не объявлена граница, принимается Object
. Если граница объявлена, она состоит либо из:
• одного типа переменной T
или
• класса или интерфейса типа T
возможно с последующим типами интерфейсов I1 & ... & In
.
это, похоже, работает; но почему при переключении числа и сопоставимых результат приводит к ошибке? –