Java 8 的泛型增强

Java 5 引入了泛型,这是一次重大的改进,从此集合中的东西不需要每次显式的去转型。不过 Java 5 还不具备类型推断的能力,所以声明泛型必须写成

List<String> list = new ArrayList<String>();

一直到 Java 6 也是如此。自 Java 7 起泛型增强为可根据声明类型进行推断,所以 Java 7 中可以这么写

List<String> list = new ArrayList<>();  //<> 中的参数可省略,如果类型参数多, 或多层嵌套时很省事

List<String> list = Collections.emptyList(); //见  Java 泛型 -- 依据声明的变量类型自动推断

Java 8 开始对泛型类型推断又进一步增强:可根据方法上下文进行推断,例如下面的代码在 Java 7 下编译不过

阅读全文 >>

走进函数式编程 (Becomming Functional) (不可变性)

不可变性(Immutable--不是不让谁变性) 在设计模式中似乎不那么显眼,但是它在函数式编程却起着举足轻重的意义了。我们都知道 Java 的 String 是设计为 Immutable 的,对 String 改变都会产生新的 String 实例,这有助于共享常量池中字符串与并发。

这里再回顾上一篇关于纯虚函数(输入决定输出,无副作用函数,非 C++ 中可重载无 Body 的函数),由此可知,Immutable 也有助于实现纯虚函数,因为一个不可变实例被传入到某个函数中,该实例的内部状态是无法被修改的,也就是说该函数是无副作用的。

先来感受一下可变类型在并发环境下的一个弊端,看个例子,可变的 Customer 类有三个属性 name, email 和  age, 它还有一个更新方法 updateNameAndEmail() 阅读全文 >>