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
推荐阅读
- 数学|“数学诺奖”得主丘成桐放弃哈佛回清华:希望中国基础科学成世界一流
- 教师|英语老师为做网红辞职,原本是个“乖乖女”,为了爱好放弃职业
- 玩转Java8 lambda表达式&函数式接口一
- 飞度为什么放弃手动挡?
- MySQL数据迁移到TiDB的流程及为何放弃MyCat
- 为什么这么多人恨慈禧?标志着慈禧放弃抵抗
- 放弃 ifconfig,拥抱 ip 命令
- 索尼|索尼LinkBuds系列新品曝光:独创“甜甜圈”设计被放弃
- 发型|女人50岁以后,放弃黑长直和泡面卷吧,这4种发型更减龄洋气
- Java8——异步编程
