Проблема с применением Function<? extends Number, Boolean> f = i -> true;
в вашем методе <T extends Number> Boolean use(T n)
заключается в том, что вы можете назначить f
функцию, которая принимает аргументы одного подкласса Number
(скажем, Double
), в то время как ваш use
Метод попытается передать ему экземпляр другого подкласса Number
(скажем, Integer
).
Вы можете изменить определение Function
на
Function<Number, Boolean> f = i -> true;
, котороебудет принимать любой тип extends Number
в качестве аргумента.
Или вы можете определить и Function
, и метод в одном универсальном классе, который будет гарантировать, что аргументы, переданные в use()
, должны соответствоватьаргумент, ожидаемый f
:
class Generic<T extends Number> {
Function<T, Boolean> f = i -> true;
public Boolean use(T n) {
return f.apply(n);
}
}