import java.util.Collection; class Test { public static final UnaryFunction<Object, Object, RuntimeException> unaryFunction = new UnaryFunction<Object, Object, RuntimeException>() { public Object execute(Object o) throws RuntimeException { return null; } }; public static <A, B, X extends Throwable> void someMethod() { transformCollection(null, unaryFunction, null); } public static <A, B, X extends Throwable> void transformCollection(Collection<? extends A> input, UnaryFunction<A, B, X> transform, Collection<? super B> output) throws X { for (A a : input) { B b = transform.execute(a); output.add(b); } } } interface UnaryFunction<A, B, X extends Throwable> { public B execute(A a) throws X; }