原文链接 作者: Mark Needham
最近我们想构建一个需要使用外部依赖进行计算的域对象,同时我们希望在测试的时候能够忽略这些依赖。
最开始,我们简单地在域对象中创建依赖,这使得在测试的过程中,不能随意修改依赖的值。
同样,由于外部依赖仅仅只是域对象的计算所需,并非定义域对象的可变状态,我们不应该把依赖通过构造函数传入域对象内部。
最后,我们把域对象定义成内部类,代码如下:
原文链接 作者: Mark Needham
最近我们想构建一个需要使用外部依赖进行计算的域对象,同时我们希望在测试的时候能够忽略这些依赖。
最开始,我们简单地在域对象中创建依赖,这使得在测试的过程中,不能随意修改依赖的值。
同样,由于外部依赖仅仅只是域对象的计算所需,并非定义域对象的可变状态,我们不应该把依赖通过构造函数传入域对象内部。
最后,我们把域对象定义成内部类,代码如下:
在函数式编程中,Map和Fold是两个非常有用的操作,它们存在于每一个函数式编程语言中。既然Map和Fold操作如此强大和重要,但是Java语言缺乏Map和Fold机制,那么该如何解释我们使用Java完成日常编码工作呢?实际上你已经在Java中利用手动编写循环的方式实现了Map和Fold操作(译者注:许多动态语言如python都提供了内置的实现)。
免责声明:本篇文章仅仅只是一篇入门简介,并非函数式编程的参考。函数式编程爱好者可能会不赞同本文观点。
#你已经很熟悉Map和Fold
假设这里有一个List
在Java程序员的世界里,第一要素是“类”,而在函数式编程里,第一要素则是“函数”。完全不同的编程理念,确实很难让函数式编程出现在Java工程师日常工作的代码中。
先来2篇优秀博文扫盲:
仔细阅读过上面2篇文章之后,相信你已经对函数式编程有了一定的了解。同时,在许多高级语言(Java、C#等)都陆续加入了函数式编程特性的形势下,不难预测函数式编程将再次成为未来的主流编程模型。
本系列译文如下:
作者: Jakob Jenkov
本小节会简要概括Java IO中的PushbackInputStream,SequenceInputStream和PrintStream。其中,最常用的是PrintStream,System.out和System.err都是PrintStream类型的变量,请查看Java IO: System.in, System.out, System.err浏览更多关于System.out和System.err的信息。
#PushbackInputStream
PushbackInputStream用于解析InputStream内的数据。有时候你需要提前知道接下来将要读取到的字节内容,才能判断用何种方式进行数据解析。PushBackInputStream允许你这么做,你可以把读取到的字节重新推回到InputStream中,以便再次通过read()读取。代码如下:
可以通过PushBackInputStream的构造函数设置推回缓冲区的大小,代码如下:
这个例子设置了8个字节的缓冲区,意味着你最多可以重新读取8个字节的数据。