public static <T1, T2, R> BiFunction<T1, T2, R> intercept(BiFunction<T1, T2, R> innermost, BinaryInterceptor<T1, T2> first, BinaryInterceptor<T1, T2> second) {
        dbc.precondition(first != null, "cannot create an interceptor chain with a null interceptor");
        dbc.precondition(second != null, "cannot create an interceptor chain with a null interceptor");
        final ArrayIterator<BinaryInterceptor<T1, T2>> interceptors = ArrayIterator.of(first, second);
        return new BinaryInterceptorChain<>(innermost, interceptors);
    }
public static < T1 , T2 , R > BiFunction < T1 , T2 , R > intercept ( BiFunction < T1 , T2 , R > innermost , BinaryInterceptor < T1 , T2 > first , BinaryInterceptor < T1 , T2 > second ) { dbc . precondition ( first != null , "cannot create an interceptor chain with a null interceptor" ) ; dbc . precondition ( second != null , "cannot create an interceptor chain with a null interceptor" ) ; final ArrayIterator < BinaryInterceptor < T1 , T2 > > interceptors = ArrayIterator . of ( first , second ) ; return new BinaryInterceptorChain < > ( innermost , interceptors ) ; }
Creates a binary interceptor chain.

@param <T1> the function first parameter type
@param <T2> the function second parameter type
@param <R> the function result type
@param innermost the function to be intercepted
@param first the first interceptor
@param second the second interceptor
@return the resulting function