private Object newInstance(Type type) { try { return type.newInstance(); } catch (Exception ex) { try { // Try a private constructor. Constructor constructor = type.getDeclaredConstructor(); constructor.setAccessible(true); return constructor.newInstance(); } catch (SecurityException ignored) { } catch (NoSuchMethodException ignored) { if (type.isArray()) throw new SerializationException( "Encountered JSON object when expected array of type: " + type.getName(), ex); else if (type.isMemberClass() && !type.isStatic()) throw new SerializationException( "Class cannot be created (non-static member class): " + type.getName(), ex); else throw new SerializationException( "Class cannot be created (missing no-arg constructor): " + type.getName(), ex); } catch (Exception privateConstructorException) { ex = privateConstructorException; } throw new SerializationException( "Error constructing instance of class: " + type.getName(), ex); } }
/** * Uses the constructor to create and initialize a new instance of the constructor's declaring * class, with the supplied initialization parameters. */ public Object newInstance(Object... args) throws ReflectionException { try { return constructor.newInstance(); } catch (IllegalArgumentException e) { throw new ReflectionException( "Illegal argument(s) supplied to constructor for class: " + getDeclaringClass().getName(), e); } }