import java.util.*;
import java.util.function.*;

@FunctionalInterface
interface VarArgsFunction<T, U> extends Function<T[], U> {
    @Override
    U apply(T... args);
}

class Main {
	public static void main(String[] args) {
		invokeApply();
	}
    static void invokeApply() {
        VarArgsFunction<Double, List<Double>> fn =
            Arrays::asList;
        List<Double> list = invokeApply(fn, 1.0, 2.0, 3.0);
    }
    static <T, U> U invokeApply(VarArgsFunction<T, U> fn,
                                T arg0, T arg1, T arg2) {
        return fn.apply(arg0, arg1, arg2); // throws an exception
    }
}