private Method findMethod(Object base, String name, Class<?>[] types, int paramCount) { if (types != null) { try { return findAccessibleMethod(base.getClass().getMethod(name, types)); } catch (NoSuchMethodException e) { return null; } } Method varArgsMethod = null; for (Method method : base.getClass().getMethods()) { if (method.getName().equals(name)) { int formalParamCount = method.getParameterTypes().length; if (method.isVarArgs() && paramCount >= formalParamCount - 1) { varArgsMethod = method; } else if (paramCount == formalParamCount) { return findAccessibleMethod(method); } } } return varArgsMethod == null ? null : findAccessibleMethod(varArgsMethod); }