abstract class WrapperOne { public abstract WrapperOne reformChain(Reformer> reformer); } interface WrapperTwo {} interface Reformer { T reform(); } class ReformerClient { public WrapperOne sampleChainA(WrapperOne p, Reformer> r) { return p.reformChain(r::reform); } public WrapperOne sampleChainB(WrapperOne p, Reformer> r) { return p.reformChain(r::reform); } public WrapperOne sampleChainC(WrapperOne p, Reformer> r) { return p.reformChain(r); } }