Я нашел другой способ, указав расширение Function<A,B>
следующим образом:
class SpecificFunction<A,B> extends Function<A,B> {}
Можно определить множественные перегрузки для Function<A,B>
и SpecificFunction<A,C>
, что было бы невозможно без дополнительного классаиз-за стирания типа.Это работает, потому что спецификация языка java явно обязывает компилятор java связывать вызов функции с самой конкретной функцией, которую он может найти.Одна часть в определении того, как найти наиболее конкретную функцию, заключается в следующем: если две функции m(a)
и n(b)
существуют, m(a)
более конкретна, чем n(b)
, если b
не является подтипом a
, что верно для нашего SpecificFunction<A,B>
.