放弃 StringBuilder!Java8的StringJoiner,真香( 二 )

merge的思路是用当前的striingBuilder去append other的value(必须去掉前缀),源码注释中的merge 'this'问题是什么呢? prepareBuilder()的时候可能会先append(delimiter),如果other就是this,那么length其实就多了一个delimiter,此时append还是得以添加前的length为准 。
merge的实现方式决定了toString时不能直接value.append(suffix).toString(),因为
builder.append(other.value, other.prefix.length(), length);这行代码,默认加上suffix后这里的merge的length得减去suffix的length(嗯,看来作者是想得多好多),而且merge时得把另外一个sj的内容append到当前这个sj的suffix之前(想想就麻烦多了 。。。。)

  • length
public int length() {// Remember that we never actually append the suffix unless we return// the full (present) value or some sub-string or length of it, so that// we can add on more if we need to.return (value != null ? value.length() + suffix.length() :emptyValue.length());}没什么好说的,记住length不只是add的元素的length,还有前后缀 。
总结
  • 基于StringBuilder实现,add时就把prefix和分隔符给加上了,suffix永远都不加,知道toString和length调用时才加入计算 。这样带来的merge操作实现的极大便利性!!!!!学到了,真的不错
  • emptyValue这个一定要构造时就生成吗?用户想有自己的默认值还需要先构造实例再注入吗 。。。。这个觉得还是有点奇怪
  • Objects这个工具方法是返回的校验的值本身,不错 。
public StringJoiner setEmptyValue(CharSequence emptyValue) {// 注意这个Objects.requireNonNull方法是return的第一个参数 。。。this.emptyValue = https://www.isolves.com/it/cxkf/yy/JAVA/2021-05-17/Objects.requireNonNull(emptyValue,"The empty value must not be null").toString();return this;}
作者:炫迈哥
链接:
https://www.jianshu.com/p/469fe8fdd3be




推荐阅读