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); } }
public void setAccessible(boolean accessible) { constructor.setAccessible(accessible); }