Можете ли вы передавать функции с произвольными аргументами, но определенного типа?
Насколько я понимаю, FunctionalInterface - это контракты, которые гарантируют, что аргумент и возвращаемый тип методов, которые вы передаете в другой метод, являются правильным типом. Например,
@FunctionalInterface
private interface myFunctionType<R> {
R execute() throws Exception;
}
позволяет написать функцию:
private <T> T methodCaller(final myFunctionType<T> operation) {
return operation.execute();
}
где "операция" может быть любой функцией, которая принимает 0 аргументов и возвращает объект типа T. Есть ли способ написать "methodCaller", чтобы "операция" могла быть любой функцией, которая принимает ЛЮБЫЕ аргументы (но все же возвращает объект типа T)? Если нет, то почему?
По сути что-то вроде:
public T createAnimal(int age) {}
public T createLamp(String style, boolean secondHand) {}
methodCaller(() -> createAnimal(5));
methodCaller(() -> createLamp("plain", true));
Но это будет работать для любой функции с ЛЮБЫМИ аргументами, которая все еще возвращает T.