public final @NotNull <C extends Collection<? super E>> C addAllTo(@NotNull C collection) {
    if (this == EMPTY) return collection;
    E single = asElement();
    if (single != null) {
      collection.add(single);
      return collection;
    }
    Collection<E> col = asCollection();
    if (col != null) {
      collection.addAll(col);
    }
    else {
      for (E item : this) {
        collection.add(item);
      }
    }
    return collection;
  }
public final @NotNull <C extends Collection<? super E>> C addAllTo(@NotNull C collection)