docs: public static <T> T instantiate(Class<T> clazz, Class<? super T> castTo) {
  		if (clazz == null) {
  			throw new NullPointerException();
  		}
  
  		// check if the class is a subclass, if the check is required
  		if (castTo != null && !castTo.isAssignableFrom(clazz)) {
  			throw new RuntimeException("The class '" + clazz.getName() + "' is not a subclass of '" +
  				castTo.getName() + "' as is required.");
  		}
  
  		return instantiate(clazz);
  	}