返回顶部
首页 > 资讯 > 前端开发 > html >Java8新特性系列有哪些
  • 865
分享到

Java8新特性系列有哪些

2024-04-02 19:04:59 865人浏览 泡泡鱼
摘要

本篇内容介绍了“Java8新特性系列有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Java 8之前

本篇内容介绍了“Java8新特性系列有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在Java 8之前,默认情况下,接口中的所有方法都是公共的和抽象的。但是这一限制在Java 8中被打破了,Java  8允许开发人员在接口中添加新方法,而无需在实现这些接口的类中进行任何更改。

为什么会有默认方法?

主要是为了方便扩展已有接口;如果没有默认方法,假如给Java中的某个接口添加一个新的抽象方法,那么所有实现了该接口的类都得修改,影响将非常大。

举个例子,Sortable接口以及实现该接口的类SortableNumberCollection和SortableStrinGCollection。该接口有两种方法:void  sort(); 和T peek()。

public interface Sortable<T> {     void sort();     T peek(); }

sort()方法用于对象排序,T peek()用于获取指定元素,另外需要一个比较器类ObjectComparator来对对象进行排序。

public class ObjectComparator implements Comparator<Comparable> {     @Override     public int compare(Comparable o1, Comparable o2) {         return o1.compareTo(o2);     } }

SortableStringCollection是一个自定义集合类可以进行排序,并查看字符串指定元素,代码如下:

public class SortableStringCollection implements Sortable<String> {      private List<String> items = new ArrayList<>();      public void add(String item) {         items.add(item);     }      @Override     public void sort() {         items.sort(new ObjectComparator());     }      @Override     public String peek() {         return items.get(0);     } }

同样,SortableNumberCollection是一个自定义集合类,其中包含可以使用接口方法进行排序和查看的数字列表指定元素,代码如下:

public class SortableNumberCollection implements Sortable<Integer> {      private List<Integer> items = new ArrayList<>();      public void add(Integer item) {         items.add(item);     }      @Override     public void sort() {         items.sort(new ObjectComparator());     }      @Override     public Integer peek() {         return items.get(0);     } }

在Java8之前如果对接口Sortable添加新方法:T sortAndPeek(),那么SortableStringCollection和

SortableNumberCollection都必须实现T sortAndPeek()方法。

Java8之后提供了一种新的实现方式,默认方法 default method,我们可以对Sortable进行如下改造:

public interface Sortable<T> {     void sort();     T peek();      default T sortAndPeek(){    // New 'default method' added in the interface         sort();         return peek();     }  }

同时SortableStringCollection和SortableNumberCollection类不需要任何更改。这样可以减少我们对原有代码的改动。同时如果需要,还可以在实现此接口的任何类中重写该方法T  sortAndPeek()的默认实现。

在下图中我们看到default Method不通的标识:

Java8新特性系列有哪些

在多继承中使用默认方法问题

如果两个或多个接口具有相同的默认方法签名,并且一个类实现了这两个接口,则将引发编译时错误。例如:

public interface Interface1 {     void methodOne(String str);     default void newMethod(){         System.out.println("Interface1: Newly added method");     } }    public interface Interface2 {     void methodTwo(String str);     default void newMethod(){         System.out.println("Interface2: Newly added method");     } }    public class InterfaceImplementation implements Interface1, Interface2{     @Override     public void methodOne(String str) {         System.out.println("Overridden methodOne: " + str);     }      @Override     public void methodTwo(String str) {         System.out.println("Overridden methodTwo: " + str );     } }

此时代码会提示如下异常:

InterfaceImplementation inherits unrelated defaults for newMethod() from types Interface1 and Interface2

要解决此问题,我们将必须重写类InterfaceImplementation中的方法:

public class InterfaceImplementation implements Interface1, Interface2{     @Override     public void methodOne(String str) {         System.out.println("Overridden methodOne: " + str);     }      // newMethod implemented to resolve the conflict.     @Override     public void newMethod() {         System.out.println("InterfaceImplementation: Newly added method");     }      @Override     public void methodTwo(String str) {         System.out.println("Overridden methodTwo: " + str );     } }

我们总结一下:

  • 类中的方法优先级最高。类或父类中声明的方法的优先级高于任何声明为默认方法的优先级。

  • 如果无法依据第一条进行判断,那么子接口的优先级更高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即如果B继承了A,那么B就比A更加具体。

  • 最后,如果还是无法判断,继承了多个接口的类必须通过显式覆盖和调用期望的方法,显式地选择使用哪一个默认方法的实现。

在Java 8中添加静态方法

接口定义的静态方法独立于任何对象调用。所以,在调用静态方法时,不需要实现接口,也不需要接口的实例,

就像“默认方法”一样,“静态方法”也可以添加到接口中。例如,我们可以添加一个静态方法Direction  getDefaultDirection(),该方法将返回默认Direction,例如:

public interface Sortable<T> {      Direction defaultDirection = Direction.DESC;      enum Direction {         ASC,         DESC     };      void sort();     T peek();      static Direction getDefaultDirection(){    // 'static method' added to the interface.         return defaultDirection;     } }

在上面的示例中,可以使用类引用来调用静态Direction getDefaultDirection()方法:

Sortable.getDefaultDirection()

对默认方法和静态方法的一点思考

接口是设计模式中一种开闭原则的体验,而java8赋予了接口新的特性,使得接口使用起来更加的得心应手了,这也有助于我们更加内聚自己的代码结构了。Java源码中也有很多场景使用到了默认方法,例如:Iterator接口,我们在开发中可以多使用一些新的特性从而提高开发效率及增加代码的健壮性。

public interface Iterable<T> {      Iterator<T> iterator();          default void forEach(Consumer<? super T> action) {         Objects.requireNonNull(action);         for (T t : this) {             action.accept(t);         }     }          default Spliterator<T> spliterator() {         return Spliterators.spliteratorUnknownSize(iterator(), 0);     }      }

“Java8新特性系列有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Java8新特性系列有哪些

本文链接: https://lsjlt.com/news/83450.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java8新特性系列有哪些
    本篇内容介绍了“Java8新特性系列有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Java 8之前...
    99+
    2024-04-02
  • Java8中流的特性有哪些
    这篇文章主要介绍了Java8中流的特性有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。流(Stream)是Java8为了实现最佳性能而引入的一个全新的概念。在过去的几年中...
    99+
    2023-05-30
    java8
  • Java8中Stream的特性有哪些
    这期内容当中小编将会给大家带来有关Java8中Stream的特性有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.初识stream先来一个总纲:东西就是这么多啦,stream是java8中加入的一个...
    99+
    2023-05-31
    java8 stream ava
  • Java8新特性Optional容器类的应用有哪些
    这篇文章主要讲解了“Java8新特性Optional容器类的应用有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java8新特性Optional容器类的应用有哪些”吧!1.Optiona...
    99+
    2023-06-25
  • Java8(JDK1.8)新特性
    一、Java8(JDK1.8)新特性 Lamdba表达式 函数式接口 方法引用和构造引用 Stream API 接口中的默认方法和静态方法 新时间日期API OPtional 其他特性 二、java8(JDK1.8)新特性简介 速度快; 代...
    99+
    2023-09-12
    java
  • Java8中日期API的特性有哪些
    这期内容当中小编将会给大家带来有关Java8中日期API的特性有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.Clock 时钟Clock类提供了访问当前日期和时间的方法,Clock是时区敏感的,可...
    99+
    2023-05-31
    java8 日期api ava
  • java8新特性之stream流中reduce()求和知识有哪些
    这篇文章主要介绍了java8新特性之stream流中reduce()求和知识有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.stream().reduce()单字段求...
    99+
    2023-06-15
  • Java8新特性详解
    陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油。 本文是介绍Java8新特性与常用方法(此篇只做大体介绍了解,之后会把重...
    99+
    2023-08-17
    java jvm android
  • MySQL8.0新特性有哪些
    这篇文章给大家分享的是有关MySQL8.0新特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。1、 默认字符集由latin1变为utf8mb4在8.0版本之前,默认字符集为...
    99+
    2024-04-02
  • oracle18c新特性有哪些
    oracle18c新特性有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Oracle宣布Database...
    99+
    2024-04-02
  • Vue3有哪些新特性
    本篇内容介绍了“Vue3有哪些新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!组件v-model支持参...
    99+
    2024-04-02
  • PostgreSQL11有哪些新特性
    这篇文章主要介绍“PostgreSQL11有哪些新特性”,在日常操作中,相信很多人在PostgreSQL11有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Post...
    99+
    2024-04-02
  • Oracle12C新特性有哪些
    这篇文章主要介绍“Oracle12C新特性有哪些”,在日常操作中,相信很多人在Oracle12C新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle12C新...
    99+
    2024-04-02
  • jQuery1.6.4有哪些新特性
    本篇内容介绍了“jQuery1.6.4有哪些新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Data:...
    99+
    2024-04-02
  • MySQL5.6有哪些新特性
    这篇文章主要介绍“MySQL5.6有哪些新特性”,在日常操作中,相信很多人在MySQL5.6有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL5.6有哪些新...
    99+
    2024-04-02
  • Swagger3.0有哪些新特性
    这篇文章主要讲解了“Swagger3.0有哪些新特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Swagger3.0有哪些新特性”吧!支持 OpenAPI...
    99+
    2024-04-02
  • css3新特性有哪些
    这篇文章将为大家详细讲解有关css3新特性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   CSS3的新特征有:1、圆角效果;2、图形化边界;3、块阴影与文字阴...
    99+
    2024-04-02
  • PHP8.1新特性有哪些
    这篇文章主要为大家展示了“PHP8.1新特性有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP8.1新特性有哪些”这篇文章吧。当大多数人的 Linux ...
    99+
    2024-04-02
  • ES10新特性有哪些
    这篇文章给大家分享的是有关ES10新特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ES10 虽然没有像 ES6 那么多新特性,但 ES10 仍然有一些有用的特性。文本通...
    99+
    2024-04-02
  • JavaScript新特性有哪些
    这篇文章主要介绍“JavaScript新特性有哪些”,在日常操作中,相信很多人在JavaScript新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScri...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作