РЕДАКТИРОВАТЬ: спрашивающий обновил свой вопрос много после прочтения этого ответа. Важно отметить, что изначально каждый метод имел совершенно разные сигнатуры (разные типы параметров и суммы, а также разные типы возвращаемых данных). Я оставляю этот ответ без изменений, имейте в виду, что он больше не относится к вопросу в его нынешнем виде.
Это не очень хорошо работает, потому что методы, которые вы хотите передать, имеют совершенно разные подписи (methodOne's равен (B, String) -> int
(почему у вас там заглавная буква I Int
, это опечатка?), methodTwo - (B) -> String
, а methodThree - (B, String, String) -> String
.
В java лямбды должны соответствовать функциональному интерфейсу. Невозможно иметь функциональный интерфейс для переменного числа входных аргументов.
С помощью шаблонов вы можете попытаться описать тот факт, что типы ваших входов и выходов различны каждый раз.
Это действительно звучит как проблема X / Y: у вас есть проблема X (которую вы не объяснили, и мы не знаем, что это такое), и вы подумали: «Я знаю! Я» Я буду использовать лямбды, чтобы абстрагироваться от понятия «метод» ... и теперь вы задаете вопросы об этом.
Но вы задаете неправильный вопрос. Задайте X. Потому что даже если гипотетически Вы можете как-то подогнать свои 3 метода в один и тот же лямбда-тип (вы не можете), тогда вы не сможете их вызывать.
Вот еще одно работоспособное понятие, но я понятия не имею, если это решает ваш X, потому что вы не объяснили это:
@FunctionalInterface
public interface MyXThinger {
Object result(Object... args);
}
Если вы хотите вызвать это, как вы узнали бы, что конкретный MyXThinger
(вы не объяснили, что такое X, поэтому я могу не придумать хорошее имя здесь) работает, если вы передаете 2 строки, и падает, если вы пропустите что-нибудь еще? Вот почему, более или менее, я нахожу описание вашей проблемы недостаточным, чтобы дать solid совет здесь.