strman-java 源码阅读
最近看到一个项目strman-java声称能满足所有的字符串操作。好奇的进去看了下,发现比较有意思。项目也较小,正好可以花点时间来看下别人是如何优雅的实现字符串操作的。
项目是用gradle构建的 intellj idea居然无压力导入也是出乎我的预料。
项目的test也写的非常完善 就先从test看起走了
测试这里就用了static的静态引用,刚开始还一时不习惯...
....
import static strman.Strman.*;
import static strman.Strman.endsWith;
import static strman.Strman.format;
public class StrmanTest {
@Test
public void append_shouldAppendStringsToEndOfValue() throws Exception {
assertThat(append("f", "o", "o", "b", "a", "r"), equalTo("foobar"));
assertThat(append("foobar"), equalTo("foobar"));
assertThat(append("", "foobar"), equalTo("foobar"));
}
}
2 主要的类Strman也非常有意思。
/**
* A String manipulation library without any dependencies
*/
public abstract class Strman {
private static final Predicate NULL_STRING_PREDICATE = str -> str == null;
private static final Supplier NULL_STRING_MSG_SUPPLIER = () -> "'value' should be not null.";
private Strman() {
}
.....
}
Strman这里定义为抽象的类 我想是为了避免有人将这个类实例化。
开始的时候就定义了两个对字符串操作的lambda表达式。
NULL_STRING_PREDICATE 是判断一个str是否是null。如果是就返回true,等同于这个函数。
pulic void isStrIsNull(String str){
return null == str;
}
本来三行的代码,这里一行的代码就实现了。
NULL_STRING_MSG_SUPPLIER 这个是返回一个空字符串。
类似于这个函数
pulic void getStrIsNullMsg(){
return "'value' should be not null.";
}
这里暂时还不知道这样写NULL_STRING_MSG_SUPPLIER的意义何在。。。
这里说下 Predicate Supplier 是java 8新增的 java.util.function的接口编程的类
Predicate——接收T对象并返回boolean
Supplier——提供T对象(例如工厂),不接收值