code: private static Object[] buildConstructionData(Constructor<?> constructor) {
          Class<?>[] parameterTypes = constructor.getParameterTypes();
          Object[] args = new Object[parameterTypes.length];
          for (int i = 0; i < parameterTypes.length; i++) {
              if (parameterTypes[i] == boolean.class) {
                  args[i] = false;
              } else if (parameterTypes[i] == int.class) {
                  args[i] = (int) 0;
              } else if (parameterTypes[i] == long.class) {
                  args[i] = (long) 0;
              } else if (parameterTypes[i] == short.class) {
                  args[i] = (short) 0;
              } else if (parameterTypes[i] == byte.class) {
                  args[i] = (byte) 0;
              } else if (parameterTypes[i] == float.class) {
                  args[i] = (float) 0;
              } else if (parameterTypes[i] == double.class) {
                  args[i] = (double) 0;
              } else if (parameterTypes[i] == char.class) {
                  args[i] = (char) 0;
              }
          }
          return args;
      }
docs: note that this does not handle empty collections/maps