import java.util.function.Consumer; class Foo { static void add(Klass klass, E e, Consumer action) {} static void bar(Klass k, Method m) { add(k, m, k::addMethod); } } interface Element {} interface Method extends Element {} interface Type { > C addMethod(Method m); } interface Klass extends Type {} //simplified class Foo1 { static void bar(Type1 k) { k.addMethod(); } } interface Type1 { > C addMethod(); }