@SuppressWarnings("unchecked")
	public Constructor<T> constructor(Object... args) {
		try {

			if (null == args || args.length == 0) {

				Constructor<T> c = clazz.getDeclaredConstructor();
				if (!Modifier.isPrivate(c.getModifiers())) {
					return c;
				}
			}

			Class<?>[] argTypes = Lang.evalToTypes(args);
			for (Constructor<?> c : constructors()) {

				Class<?>[] paramTypes = c.getParameterTypes();
				if (isMatchArgTypes(argTypes, paramTypes)) {
					return (Constructor<T>) c;
				}
			}

			throw new NoSuchMethodException();
		} catch (Exception e) {
			throw Lang.uncheck(e);
		}
	}