Я ищу способ вызвать несколько методов аргументов, но используя конструкцию lambda
. В документации говорится, что lambda
можно использовать только в том случае, если он может отображаться в функциональном интерфейсе.
Я хочу сделать что-то вроде:
test((arg0, arg1) -> me.call(arg0, arg1));
test((arg0, arg1, arg2) -> me.call(arg0, arg1, arg2));
...
Есть ли способ сделать это элегантно, не определяя 10 интерфейсов, по одному для каждого аргумента?
Обновление
Я использую несколько интерфейсов, простирающихся от интерфейса не-метода, и я перегружаю этот метод.
Пример для двух аргументов:
interface Invoker {}
interface Invoker2 extends Invoker { void invoke(Object arg0, Object arg1);}
void test(Invoker2 invoker, Object ... arguments) {
test((Invoker)invoker, Object ... arguments);
}
void test(Invoker invoker, Object ... arguments) {
//Use Reflection or whatever to access the provided invoker
}
Я надеюсь на возможность заменить 10 интерфейсов invoker и 10 перегруженных методов одним решением.
У меня есть разумный случай использования и, пожалуйста, не задавайте таких вопросов, как "Зачем вам это делать?" и "В чем проблема, которую вы пытаетесь решить?" или что-то в этом роде. Просто знайте, что я подумал об этом, и это законная проблема, которую я пытаюсь решить.
Извините, что добавляет путаницу, называя ее invoker, но на самом деле это то, что она вызывается в моем текущем примере использования (контракты на конструкторские проверки).
В принципе, как указано выше, подумайте о методе, который работает с другим числом атрибутов в lambda
.