import java.lang.reflect.Constructor;
import java.lang.reflect.Parameter;
import java.util.Arrays;

public class Test {
    public class Pojo {
        public String name;
    }

    public static void main(String[] _a) {
        System.out.println("Pojo: " + newup(Pojo.class));
    }

    public static <T> Object newup(Class<T> className) {
        try { return invoke(className.getConstructors()[0]); }
        catch (Throwable e) { return "ex: " + e.getMessage(); }
    }

    public static <T> T invoke(Constructor<T> ctor) throws Throwable {
        var params = Arrays.stream(ctor.getParameters()).map(Test::typeDefaultValue).toArray();
        @SuppressWarnings("unchecked")
        T t = (T) ctor.newInstance(params);
        return t;
    }

    public static Object typeDefaultValue(Parameter parameter) {
        var type = parameter.getType();
        if (!type.isPrimitive()) return null;
        if (type.equals(boolean.class)) return false;
        return 0;
    }
} 