Проблема с вашим кодом заключается в том, что Java должна быть в состоянии подтвердить, что возвращаемый тип функции должен быть конвертируемым в N extends Number
для любого N
.Так, в частности, если бы я создал экземпляр класса с Double
, как в
Zero<Double> z = new Zero<Double>();
z.zero();
Вы столкнулись бы с проблемой, потому что zero
говорит, что он возвращает Double
, но этона самом деле возвращает Integer
.Ошибка типа указывает на то, что компилятор обеспокоен тем, что что-то подобное произойдет.
Насколько я знаю, в Java нет хорошего способа сделать это, потому что обобщения применяются через стирание;он не может знать тип аргумента.