джаве.
Вообщем есть метод который принимает на вход две лямбды Supplier и Consumer. Мне нужно как-то связать тип возвращаемого значения и принимаемого, они не должны быть одинаковыми, но должны использоваться только вместе. Похоже на перегрузку с дженериками, но мне нужно еще, чтобы "перегружать" можно было и в любом другом участке кода, что похоже на котлиновские экстеншн функции, но мне нужно на Java.
Вот пример чего я хочу достичь: https://pastebin.com/Har3MCH6
askAndAnswer должно быть можно перегружать из других модулей
public void test() {
Routes
.when(MyState.PizzaSelect,
askAndAnswer(
() -> new Select("Выберите пиццу", List.of("Маргарита", "Пепперони", "Мясная")),
(String res) -> {
save(res);
next(MyState.Order);
}
)
)
.when(MyState.Number,
askAndAnswer(
() -> new NumberQuestion("Сколько?"),
(Integer res) -> {
save(res);
}
)
);
}
public static void askAndAnswer(Supplier<Select> q, Consumer<String> a) {
}
public static void askAndAnswer(Supplier<NumberQuestion> q, Consumer<Integer a) {
}
Афаик, в джаве полиморфные методы с отличием только в типовом параметре делать нельзя.
> они не должны быть одинаковыми, но должны использоваться только вместе я вот не понял, что это значит — вангую, что система типов тоже не поймёт
Обсуждают сегодня