Java 8 中为什么要引出default方法
Posted 冰冻开水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 8 中为什么要引出default方法相关的知识,希望对你有一定的参考价值。
(原)
default方法是java 8中新引入进的,它充许接口中除了有抽象方法以外,还可以拥用具有实现体的方法,这一点跟jdk8之前的版本已经完全不一样了,为什么要这样做呢?
拿List接口举例,在java 8以前的老系统中有一个开发人员自己写了一个类DefinedList,它继承于List接口。
毫无疑问,DefinedList将会实现List接口中的所有抽象方法。
在java 8中,甲骨文觉得其实可让List做更多的事,比如开发中常用的给List数据进行排序,于是它们想加一个sort方法。
但是由于List是接口,在接口里面加抽象方法定会让其实现类都增加sort方法的实现,除了java中List的实现如ArryaList,LinkedList需要加sort方法的实现,我们自己写的DefinedList也必需得加这个sort的实现。
如果老系统中的java由7升级到8,那么代码一定会报错。
而为了解决java版本向后兼容问题,在List中的sort方法中加入了实现体
@SuppressWarnings({"unchecked", "rawtypes"}) default void sort(Comparator<? super E> c) { Object[] a = this.toArray(); Arrays.sort(a, (Comparator) c); ListIterator<E> i = this.listIterator(); for (Object e : a) { i.next(); i.set((E) e); } }
如果此时再由java7升级到java8,那么DefinedList会一并的继承sort方法,DefinedList也不会报错,这样就可以完美的解决java向后兼容的问题。
以上是关于Java 8 中为什么要引出default方法的主要内容,如果未能解决你的问题,请参考以下文章
JVM -- Java内存区域HotSpot虚拟机对象探秘对象的访问定位的两种方式(句柄和直接指针两种方式)
Java 8 - Interface Default Method接口默认方法
URL地址中中文乱码详解(javascript中encodeURI和decodeURI方法java.net.URLDecoder.encodejava.net.URLDecoder.decode)(代