class ClassUtil {

    public static <T> boolean canInstatnce(Class<T> clazz) {
        if (clazz == null) {
            return false;
        }
        if (clazz.isPrimitive()) {
            return clazz != void.class;
        }

        if (clazz.isArray() && Modifier.isPublic(getArrayComponentType(clazz).getModifiers())) {
            return true;
        }

        int modifier = clazz.getModifiers();

        if (Modifier.isAbstract(modifier) || Modifier.isInterface(modifier)) {
            return false;
        }

        Constructor<?>[] constructors = clazz.getConstructors();
        for (Constructor<?> constructor : constructors) {
            if (Modifier.isPublic(constructor.getModifiers())) {
                return true;
            }
        }

        return false;

    }

}