class CollectionDataKey<T> extends DataKey<Collection<T>> {
    /**
     * Creates a DataKey with a computed default value dynamically.
     *
     * @param name    See {@link #getName()}.
     * @param defaultValue default value for collection key
     * @param factory data value factory for creating a new default value for the key
     */
    public CollectionDataKey(@NotNull String name, @NotNull Collection<T> defaultValue, DataNotNullValueFactory<Collection<T>> factory) {
        super(name, defaultValue, factory);
    }

    @NotNull
    public DataNotNullValueFactory<Collection<T>> getFactory() {
        return super.getFactory();
    }

    @Override
    public String toString() {<FILL_FUNCTION_BODY>}
}

        Collection<T> defaultValue = getDefaultValue();
        return "CollectionDataKey<" + defaultValue.getClass().getSimpleName() + "> " + getName();
    
<methods>public void <init>(@NotNull String, @NotNull Collection<T>, @NotNull DataNotNullValueFactory<Collection<T>>) ,public void <init>(@NotNull String, @NotNull NotNullValueSupplier<Collection<T>>) ,public void <init>(@NotNull String, @NotNull DataKey<Collection<T>>) ,public void <init>(@NotNull String, @NotNull Collection<T>) ,public @NotNull Collection<T> get(@Nullable DataHolder) ,public @NotNull Collection<T> getDefaultValue() ,public @NotNull Collection<T> getDefaultValue(@NotNull DataHolder) ,public @NotNull DataNotNullValueFactory<Collection<T>> getFactory() ,public @NotNull MutableDataHolder set(@NotNull MutableDataHolder, @NotNull Collection<T>) ,public java.lang.String toString() <variables>