RFR: String.join(), StringJoiner additions

Alan Bateman Alan.Bateman at oracle.com
Mon Apr 15 17:46:30 UTC 2013

On 12/04/2013 16:02, Alan Bateman wrote:
> On 11/04/2013 23:33, Jim Gish wrote:
>> Please review 
>> http://cr.openjdk.java.net/~jgish/Bugs-5015163-7175206-7172553/ 
>> <http://cr.openjdk.java.net/%7Ejgish/Bugs-5015163-7175206-7172553/>
>> These are changes that we made in lambda that we're now bringing into 
>> JDK8.
>> I've made a couple of additions - making StringJoiner final and 
>> adding a couple of constructors to set the emptyOutput chars.
>> Thanks,
>>    Jim
> :
> I plan to look at StringJoiner in more detail later.
Just to follow up with a few comments on StringJoiner.

I don't know how "final" this is but I wonder if you've already 
experimented (and rejected) having a smaller set of constructors? I will 
guess that the most popular usage will be the simple 1-arg constructor 
to just specify the delimiter. There will likely be some cases where you 
want a prefix and suffix too. I bring this up because it seems a bit 
inconsistent to just have a setter for the default result when one could 
as easily have a method to set the prefix/suffix too. Clearly it would 
complicate the implementation a bit but it could be optimized for the 
case that these are set before any elements are added. Anyway, I'm not 
trying to re-open discussions on this, just trying to understand if what 
you are proposing is already close to final.

On method names then "setEmptyOutput" doesn't seem quite right, I wonder 
if you've considered others, like setEmptyValue or setDefaultResult.

Minor nits:

- The javadoc for "add" starts with "add the supplied", should be "Add".

- The @param in the 1-arg constructor is indented inconsistently to the 
other methods

- The this(...) usage in the 3-arg constructor has spaces around it so 
it is inconsistent with the other usages.

- In the class description it reads "Prior to adding something to the 
StringJoiner, {@code sj.toString()}  will, by default, return {@code 
prefix+suffix}". This might be better as "Prior to adding elements to a 
StringJoiner, its toString() method, if invoked, will ...".

- The comma in "For example," set expectations that there will be more 
text after the example but this isn't so.

- As with the comments on String.join then I assume the test should have 
1 bug number (not 3). Also to be consistent with the existing 
organization it would be better to move it down to 
test/java/util/StringJoiner (I know we have to come up with a solution 
for tests with package names).

- The test has two @summary lines, I assume this is a mistake.

- In terms of code coverage then it looks like the only method that is 
tested for NPE is setEmptyOutput.

That's all I have.


More information about the core-libs-dev mailing list