一、接口的默认方法
Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可
该特性给接口带来了冲击,原来接口只提供方法的定义,不提供方法的实现,现在变得和抽象类很像了,而且接口是多继承,又会造成一个类继承多个接口有同名的默认方法到底调用哪个的问题
首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的java 8之前的集合框架没有foreach方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。
这个功能在实际开发中不太常用,主要是jdk或框架的源码中可能有用到
interface Formula {
double calculate(int a);
//接口的默认方法
default double sqrt(int a) {
return Math.sqrt(a);
}
}
二、Lambda表达式
初始代码:
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String a, String b) {