Java8特性之接口的默认方法与静态方法
来源:互联网 发布:手机海外电视直播软件 编辑:程序博客网 时间:2024/06/10 09:40
简介
意义
众所周知,我们应该使用接口编程,接口使得在交互时不需要关注具体的实现细节,从而保持程序的松散耦合。在API的设计中,设计简约而清晰的接口非常重要。被称作固定定律的接口分离定律,其中有一条就讲到了应该设计更小的特定客户端接口而不是一个通用目的的接口。良好的接口设计是让应用程序和库的API保持简洁高效的关键。如果你曾有过接口API设计的经验,那么有时候你会感觉到为API增加方法的必要。
案例
private
interface
Defaulable {
// Interfaces now allow default methods, the implementer may or
// may not implement (override) them.
default
String notRequired() {
return
"Default implementation"
;
}
}
private
static
class
DefaultableImpl
implements
Defaulable {
}
private
static
class
OverridableImpl
implements
Defaulable {
@Override
public
String notRequired() {
return
"Overridden implementation"
;
}
}
Defaulable接口用关键字default声明了一个默认方法notRequired(),Defaulable接口的实现者之一DefaultableImpl实现了这个接口,并且让默认方法保持原样。Defaulable接口的另一个实现者OverridableImpl用自己的方法覆盖了默认方法。
Java 8带来的另一个有趣的特性是接口可以声明(并且可以提供实现)静态方法。例如:
private
interface
DefaulableFactory {
// Interfaces now allow static methods
static
Defaulable create( Supplier< Defaulable > supplier ) {
return
supplier.get();
}
}
下面的一小段代码片段把上面的默认方法与静态方法黏合到一起。
public
static
void
main( String[] args ) {
Defaulable defaulable = DefaulableFactory.create( DefaultableImpl::
new
);
System.out.println( defaulable.notRequired() );
defaulable = DefaulableFactory.create( OverridableImpl::
new
);
System.out.println( defaulable.notRequired() );
}
这个程序的控制台输出如下:
Default implementation
Overridden implementation
在JVM中,默认方法的实现是非常高效的,并且通过字节码指令为方法调用提供了支持。默认方法允许继续使用现有的Java接口,而同时能够保障正常的编译过程。这方面好的例子是大量的方法被添加到java.util.Collection接口中去:stream(),parallelStream(),forEach(),removeIf(),……
尽管默认方法非常强大,但是在使用默认方法时我们需要小心注意一个地方:在声明一个默认方法前,请仔细思考是不是真的有必要使用默认方法,因为默认方法会带给程序歧义,并且在复杂的继承体系中容易产生编译错误。更多详情请参考官方文档
- Java8特性之接口的默认方法与静态方法
- java8新特性之接口默认方法&静态方法
- java8之接口的默认静态方法
- java8新特性接口的默认方法和静态方法
- java8新特性接口的默认方法和静态方法
- Java8新特性之接口的默认方法和静态方法
- Java8 新特性之二---------接口的默认方法和静态方法
- Java8新特性之接口的默认方法和静态方法
- Java8新特性之接口的默认方法和静态方法
- Java8新特性 接口默认方法,接口静态方法
- 详解Java8特性之接口默认方法
- 找回过去之java8旧特性的接口默认方法
- 紧随时代的步伐--Java8特性之接口默认方法
- JDK8新特性之接口默认方法与静态方法
- Java8新特性Optional、接口中的默认方法与静态方法
- Java8之默认方法和静态接口方法
- Java8接口变化-静态方法&默认方法
- JAVA8接口默认方法和静态方法
- Url encode和decode 相关问题
- 气质是这样养成的
- JVM的配置参数
- [从头学数学] 第151节 二次函数 小结与复习题
- NSNotificationCenter简单使用
- Java8特性之接口的默认方法与静态方法
- Android5.0以上使用MediaProjection截图和录屏
- HID攻击之TEENSY实战
- C++,cout和std::cout的区别
- MYSQL数据库管理之权限管理
- 华为笔试题
- 【手游】梦幻西游手游 美术资源加密分析
- 经典算法——hihocoder#1014 : Trie树(字典树)
- Latex编辑技巧杂锦