public HugeArrayList<T> create() {
    normaliseArgs();

    try {
      if (arrayListClass == null)
        arrayListClass = classLoader().loadClass(typeModel.type().getName() + "ArrayList");

    } catch (ClassNotFoundException e) {
      acquireImplClass();
      defineClass(GenerateHugeArrays.dumpElement(typeModel));
      defineClass(GenerateHugeArrays.dumpAllocation(typeModel));
      arrayListClass = defineClass(GenerateHugeArrays.dumpArrayList(typeModel));
    }
    try {
      return (HugeArrayList<T>) arrayListClass.getConstructor(HugeArrayBuilder.class).newInstance(this);
    } catch (NoSuchMethodException e) {
      throw new AssertionError(e);
    } catch (InstantiationException e) {
      throw new AssertionError(e);
    } catch (IllegalAccessException e) {
      throw new AssertionError(e);
    } catch (InvocationTargetException e) {
      throw new AssertionError(e.getCause());
    }
  }