On 21 August 2017 at 21:04, Gary Gregory <garydgreg...@gmail.com> wrote:
> Hi All,
>
> We have a request for [CSV] to provide mutable records. There is no clear
> consensus to me on how to do this. The current CSVRecord class is immutable
> but is not documented as such. I attribute that to YAGNI up to now.
>
> Options range from simply making CSVRecord immutable to creating a new
> CSVMutableRecord class and a few things in between.
>
> I'd like to get a feel what the community thinks here. IMO this boils down
> to whether or not it matters that CSVRecord remains immutable.
>
> [0] do nothing
>
> [1] Add two put methods to CVSRecord making the class mutable:
> put(int,Object) and put(String,Object). This does not break BC but changes
> the runtime behavior for apps that expect immutable record and shard the
> records with other components.
>
> [2] Add a "mutableRecord" boolean option to CVSRecord and CSVFormat such
> that a new boolean in CVSRecord allow method from 1) above to either work
> or throw an exception.
>
> [3] Add a "mutableRecord" boolean option to CVSRecord and CSVFormat such
> that subclass of CVSRecord called CVSMutableRecord is created which
> contains two new put methods. See branch CSV-216.
>
> [4] The factory method:
>  /**
>   * @param orig Original to be copied.
>   * @param replace Fields to be replaced.
>   * @return a copy of "orig", except for the fields in "replace".
>   */
>  public static CSVRecord createRecord(CSVRecord orig,
>                                       Pair<Integer, String> ... replace)
>
> Could also be:
>  public static CSVRecord createRecord(CSVRecord orig,
>                                       int[] replaceIndices,
>                                       String[] replaceValues)
>
> I like the simplicity of [1] and I coded [3] to see how cumbersome that
> feels.
>
> So my preference is [1].

What about [4]?

Would that be more complicated/cumbersome to use than [1]?

Seems to me using a factory or builder to create an updated immutable
copy is the way to go here.

> Gary

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to