sO preciseGetOrCallMethod_sentinel(O object, S name, O sentinel) { if (object == null) null; // could optimize more for sure if (canCallWithVarargs(object, name)) ret call(object, name); Field f = getField(object, name); if (f != null) ret fieldGet(f, object); ret sentinel; }