public Object invoke(Object who, String methodName, Object... args) {

		Preconditions.notNull(who);
		Preconditions.hasText(methodName);

		try {

			if (null == args || args.length == 0) {
				return Invokers.newEmptyArgsMethodInvoking(who, method(methodName)).invoke();
			}

			Class<?>[] argTypes = Lang.evalToTypes(args);
			Method method = method(methodName, argTypes);
			return Invokers.newMethodInvoking(who, method, args).invoke();
		} catch (Exception e) {
			throw Lang.uncheck(e);
		}
	}