import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import java.util.function.BiFunction; interface I { default Optional> track(final String key) { return null; } } enum Args { track(I::track, AtomicReference::get, "", ""); Args(final BiFunction> ctor, final Function unctor, final String oldValue, final V oldExpected) { } }