@Override
  public <T> T @NotNull [] toArray(T @NotNull [] a) {
    Object[] elements = get();
    int len = elements.length;
    if (a.length < len) {
      //noinspection unchecked
      return (T[])Arrays.copyOf(elements, len, a.getClass());
    }
    //noinspection SuspiciousSystemArraycopy
    System.arraycopy(elements, 0, a, 0, len);
    if (a.length > len) {
      a[len] = null;
    }
    return a;
  }
@Override
  public <T> T @NotNull [] toArray(T @NotNull [] a)