static ISetAndGet iSetAndGet(ISetter setter, IF0 getter) { ret new ISetAndGet { public void set(A a) { setter?.set(a); } public A get() { ret getter?!; } }; } static ISetAndGet iSetAndGet(B target, IVF2 setter, IF1 getter) { ret new ISetAndGet { public void set(A a) { if (target != null && setter != null) setter.get(target, a); } public A get() { ret target == null || getter == null ? null : getter.get(target); } }; }