Вы не сможете получить List<Number>
.
Если ваш метод group(1,2,3)
вернет List<Integer>
, и вы сказали, что это сработало, поэтому это выражение имеет тип List<Integer>
И List<Integer>
- это , а не a List<Number>
.Наследование означает специализацию, поэтому, если ваш List<Integer>
будет своего рода List<Number>
, вы можете добавить Double
s к своему List<Integer>
(так как суперкласс может сделать это, подкласс может сделать это тоже).И это неправильно.Это не проблема приведения, она просто отложит вашу проблему компиляции до времени выполнения.Проблема логична и довольно парадоксальна для людей, но именно так работают сбор и наследование.
Итак, если вы действительно хотите получить List<Number>
, я предлагаю вам определить второй метод:
public static List<Number> groupAsNumbers(Number ... numbers) {
return Arrays.asList(numbers);
}
С уважением, Стефан