国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Java8新特性系列-默認方法和靜態方法

開發 前端
在Java 8之前,默認情況下,接口中的所有方法都是公共的和抽象的。但是這一限制在Java 8中被打破了,Java 8允許開發人員在接口中添加新方法,而無需在實現這些接口的類中進行任何更改。

[[385113]]

 在Java 8之前,默認情況下,接口中的所有方法都是公共的和抽象的。但是這一限制在Java 8中被打破了,Java 8允許開發人員在接口中添加新方法,而無需在實現這些接口的類中進行任何更改。

為什么會有默認方法?

主要是為了方便擴展已有接口;如果沒有默認方法,假如給Java中的某個接口添加一個新的抽象方法,那么所有實現了該接口的類都得修改,影響將非常大。

舉個例子,Sortable 接口以及實現該接口的類SortableNumberCollection和SortableStringCollection。該接口有兩種方法:void sort(); 和T peek()。

  1. public interface Sortable<T> { 
  2.     void sort(); 
  3.     T peek(); 

 sort()方法用于對象排序,T peek()用于獲取指定元素,另外需要一個比較器類ObjectComparator來對對象進行排序。

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

 SortableStringCollection是一個自定義集合類可以進行排序,并查看字符串指定元素,代碼如下:

  1. public class SortableStringCollection implements Sortable<String> { 
  2.  
  3.     private List<String> items = new ArrayList<>(); 
  4.  
  5.     public void add(String item) { 
  6.         items.add(item); 
  7.     } 
  8.  
  9.     @Override 
  10.     public void sort() { 
  11.         items.sort(new ObjectComparator()); 
  12.     } 
  13.  
  14.     @Override 
  15.     public String peek() { 
  16.         return items.get(0); 
  17.     } 

 同樣,SortableNumberCollection是一個自定義集合類,其中包含可以使用接口方法進行排序和查看的數字列表指定元素,代碼如下:

  1. public class SortableNumberCollection implements Sortable<Integer> { 
  2.  
  3.     private List<Integer> items = new ArrayList<>(); 
  4.  
  5.     public void add(Integer item) { 
  6.         items.add(item); 
  7.     } 
  8.  
  9.     @Override 
  10.     public void sort() { 
  11.         items.sort(new ObjectComparator()); 
  12.     } 
  13.  
  14.     @Override 
  15.     public Integer peek() { 
  16.         return items.get(0); 
  17.     } 

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

SortableNumberCollection都必須實現T sortAndPeek()方法。

Java8之后提供了一種新的實現方式,默認方法 default method,我們可以對Sortable進行如下改造:

  1. public interface Sortable<T> { 
  2.     void sort(); 
  3.     T peek(); 
  4.  
  5.     default T sortAndPeek(){    // New 'default method' added in the interface 
  6.         sort(); 
  7.         return peek(); 
  8.     } 
  9.  

 同時SortableStringCollection和SortableNumberCollection類不需要任何更改。這樣可以減少我們對原有代碼的改動。同時如果需要,還可以在實現此接口的任何類中重寫該方法T sortAndPeek()的默認實現。

在下圖中我們看到default Method不通的標識:


在多繼承中使用默認方法問題

如果兩個或多個接口具有相同的默認方法簽名,并且一個類實現了這兩個接口,則將引發編譯時錯誤。例如:

  1. public interface Interface1 { 
  2.     void methodOne(String str); 
  3.     default void newMethod(){ 
  4.         System.out.println("Interface1: Newly added method"); 
  5.     } 
  6.  
  7.  
  8.  
  9. public interface Interface2 { 
  10.     void methodTwo(String str); 
  11.     default void newMethod(){ 
  12.         System.out.println("Interface2: Newly added method"); 
  13.     } 
  14.  
  15.  
  16.  
  17. public class InterfaceImplementation implements Interface1, Interface2{ 
  18.     @Override 
  19.     public void methodOne(String str) { 
  20.         System.out.println("Overridden methodOne: " + str); 
  21.     } 
  22.  
  23.     @Override 
  24.     public void methodTwo(String str) { 
  25.         System.out.println("Overridden methodTwo: " + str ); 
  26.     } 

 此時代碼會提示如下異常:

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

要解決此問題,我們將必須重寫類InterfaceImplementation中的方法:

  1. public class InterfaceImplementation implements Interface1, Interface2{ 
  2.     @Override 
  3.     public void methodOne(String str) { 
  4.         System.out.println("Overridden methodOne: " + str); 
  5.     } 
  6.  
  7.     // newMethod implemented to resolve the conflict. 
  8.     @Override 
  9.     public void newMethod() { 
  10.         System.out.println("InterfaceImplementation: Newly added method"); 
  11.     } 
  12.  
  13.     @Override 
  14.     public void methodTwo(String str) { 
  15.         System.out.println("Overridden methodTwo: " + str ); 
  16.     } 

 我們總結一下:

  • 類中的方法優先級最高。類或父類中聲明的方法的優先級高于任何聲明為默認方法的優先級。
  • 如果無法依據第一條進行判斷,那么子接口的優先級更高:函數簽名相同時,優先選擇擁有最具體實現的默認方法的接口,即如果B繼承了A,那么B就比A更加具體。
  • 最后,如果還是無法判斷,繼承了多個接口的類必須通過顯式覆蓋和調用期望的方法,顯式地選擇使用哪一個默認方法的實現。

在Java 8中添加靜態方法

接口定義的靜態方法獨立于任何對象調用。所以,在調用靜態方法時,不需要實現接口,也不需要接口的實例,

就像“默認方法”一樣,“靜態方法”也可以添加到接口中。例如,我們可以添加一個靜態方法Direction getDefaultDirection(),該方法將返回默認Direction,例如:

  1. public interface Sortable<T> { 
  2.  
  3.     Direction defaultDirection = Direction.DESC
  4.  
  5.     enum Direction { 
  6.         ASC
  7.         DESC 
  8.     }; 
  9.  
  10.     void sort(); 
  11.     T peek(); 
  12.  
  13.     static Direction getDefaultDirection(){    // 'static method' added to the interface. 
  14.         return defaultDirection; 
  15.     } 

 在上面的示例中,可以使用類引用來調用靜態Direction getDefaultDirection()方法:

  1. Sortable.getDefaultDirection() 

對默認方法和靜態方法的一點思考

接口是設計模式中一種開閉原則的體驗,而java8賦予了接口新的特性,使得接口使用起來更加的得心應手了,這也有助于我們更加內聚自己的代碼結構了。Java源碼中也有很多場景使用到了默認方法,例如:Iterator接口,我們在開發中可以多使用一些新的特性從而提高開發效率及增加代碼的健壯性。

  1. public interface Iterable<T> { 
  2.  
  3.     Iterator<T> iterator(); 
  4.      
  5.     default void forEach(Consumer<? super T> action) { 
  6.         Objects.requireNonNull(action); 
  7.         for (T t : this) { 
  8.             action.accept(t); 
  9.         } 
  10.     } 
  11.      
  12.     default Spliterator<T> spliterator() { 
  13.         return Spliterators.spliteratorUnknownSize(iterator(), 0); 
  14.     } 
  15.      

 【編輯推薦】

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-09-13 07:53:30

安全

2014-04-10 18:00:10

Java8Java8教程

2021-03-02 07:13:54

Java8版本升級

2021-02-22 11:51:15

Java開發代碼

2024-10-09 08:42:03

2023-07-19 08:03:05

Future異步JDK

2014-07-15 14:48:26

Java8

2009-08-27 16:24:48

擴展方法C# 3.0新特性

2025-06-26 08:10:00

Java8函數

2022-12-09 07:48:10

Java8Stream表達式

2022-12-30 09:24:23

Java8Stream操作

2014-03-28 11:08:16

Java 8多重繼承

2025-09-19 00:00:00

Java8HOT3Oracle

2014-10-20 13:57:59

JavaFX 8Java 8

2014-07-14 11:34:53

Java 8Nashorn

2017-10-25 11:05:14

Java

2015-05-25 09:45:16

Java多繼承深入解析

2020-12-10 10:11:52

Javastatic關鍵字

2014-04-11 12:49:00

Java8Java8教程

2013-05-02 09:14:19

Java 8Java 8的新特性
點贊
收藏

51CTO技術棧公眾號

国产黄在线播放| 国产 日韩 欧美 综合 一区| 久久久久久久电影| 美女黄毛**国产精品啪啪| 国产精品亚洲四区在线观看| 欧美mv日韩mv国产| 91在线品视觉盛宴免费| 精品久久久久久久久久久久久久 | 毛片免费在线观看| 欧美激情资源网| 性生活免费观看视频| 亚洲黄色免费| 亚洲专区国产精品| 国产欧美日韩| 国产成人福利视频| 国产精品xxx在线观看| 久久成人国产精品| 欧美激情偷拍自拍| 亚洲1区2区3区4区| 香蕉视频国产精品 | 四虎国产精品成人免费影视| 亚洲国产婷婷综合在线精品| 久久夜色精品国产欧美乱| 2023欧美最顶级a∨艳星| 亚洲第一精品影视| 91传媒视频在线观看| 日韩av免费| 久久久久久久综合狠狠综合| 四虎永久免费网站| 欧美一级电影网站| 国偷自产av一区二区三区| 久久精品久久久久久国产 免费| 三级在线观看视频| 久久精品国产一区二区三区| 日韩av影片| 欧美精品性视频| 99成人在线| 国产精品你懂得| 欧美伦理影视网| 日韩欧美国产中文字幕| 男男激情在线| 欧美一三区三区四区免费在线看 | 亚洲自拍欧美精品| 能在线看的av| 精品国产亚洲一区二区三区在线观看 | 97久久国产亚洲精品超碰热| 国产精品77777竹菊影视小说| 亚洲高潮无码久久| 国产人久久人人人人爽| 四虎4hu新地址入口2023| 亚洲婷婷国产精品电影人久久| 中文字幕理伦片免费看| 日韩欧美在线视频| 国产美女高潮在线| 久久久精品欧美| 欧美三级美国一级| 欧美精品一区二区三区四区五区| 老司机免费视频一区二区三区| 18岁网站在线观看| 五月综合激情网| av在线私库| 欧美激情在线一区| 亚洲免费二区| 免费久久久久久| 亚洲视频一二区| 视频三区在线| 欧美xxxx做受欧美| 中文字幕免费一区二区| 亚洲va韩国va欧美va精四季| av一本久道久久综合久久鬼色| 亚洲欧美中文字幕在线观看| 欧美人妖巨大在线| 日日夜夜亚洲精品| 91精品中文在线| 国产精品羞羞答答xxdd| 超清福利视频| 亚洲第一页中文字幕| 激情av综合| 欧美日本国产精品| 国产精品国产a级| 二区三区四区高清视频在线观看| 久久手机精品视频| 狠狠入ady亚洲精品经典电影| 久久人人爽人人爽人人av| 亚洲午夜久久久久| 欧美不卡高清一区二区三区| 国产日韩在线播放| 成人性生交大片| 69av在线| 国产精品第一区| 国产精品99久久久久| 在线视频你懂| 欧美黄色小视频| 毛片一区二区| 91成人福利在线观看| 日韩成人在线观看| 综合日韩在线| xxxx影院| 亚洲国产va精品久久久不卡综合| 日韩av影片| 国产精品区二区三区日本| 亚洲国产精品黑人久久久| av毛片在线看| 91亚洲人电影| 亚洲视频图片小说| www.欧美| 伊人再见免费在线观看高清版 | 久久久婷婷一区二区三区不卡| 亚洲美女黄网| 女同互忝互慰dv毛片观看| 一区二区三区精品99久久| 国产毛片一区| 深夜福利免费在线观看| 欧美激情一区二区久久久| 国产精品456露脸| 欧美理论片在线播放| 99视频国产精品免费观看| 亚洲欧美欧美一区二区三区| 国产精品1区| 国产av人人夜夜澡人人爽麻豆 | 欧美精品xxx| 91香蕉国产在线观看软件| 日韩欧美精品一区二区三区| 精品国产中文字幕| 欧美丝袜第三区| 亚洲色图二区| 久草在线免费福利资源| 国产精品一区二区三| 亚洲乱码中文字幕| 亚洲人成精品久久久| 国产小黄视频| 欧美亚洲另类视频| 玉米视频成人免费看| 免费久久久久久久久| 国产黄色一级电影| 茄子视频成人在线| 亚洲色欲色欲www在线观看| 成人爽a毛片免费啪啪红桃视频| 久久久久久久少妇| 亚洲欧美日本另类| 久久99久久99小草精品免视看| 黄色片在线免费看| 国产精品女主播| 亚洲精品免费一二三区| 亚洲图片小说区| 菠萝蜜视频在线观看入口| 日韩久久久久久| 国产在线精品一区二区三区不卡 | 97在线国产视频| 亚洲精品99久久久久| 国产亚洲精品v| 国产剧情在线观看| 成人性生交大片免费观看嘿嘿视频| 午夜在线电影亚洲一区| 欧美中文一区二区| 91精品国产一区二区三密臀| 欧美一区二区三区四区在线| 久久精品男人的天堂| 日韩一区网站| 88av.com| 日本国产高清不卡| 亚洲国产视频a| 999精品色在线播放| 天海翼一区二区三区四区在线观看| 国产精品www网站| 亚洲福利一区二区三区| 国内亚洲精品| 爱爱爱免费视频在线观看| 91精品免费| 欧美日韩中文字幕一区| 日韩图片一区| 国产丝袜在线观看视频| 国产真实老熟女无套内射| 久久综合免费视频| 中文字幕不卡三区| 日韩欧美美女在线观看| 成人黄色影视| 亚洲999一在线观看www| 91久久精品一区二区| 狠狠色综合播放一区二区| 亚洲欧美电影| 亚洲最大成人在线观看| 国产精品偷伦视频免费观看国产 | 国产精品亚洲d| 亚洲少妇第一页| 国产女精品视频网站免费| 亚洲二区中文字幕| eeuss国产一区二区三区| 极品一区美女高清| 日韩有码电影| 亚洲乱码一区二区三区| 最新亚洲国产精品| 一区视频在线播放| 好看不卡的中文字幕| 俺来也官网欧美久久精品| 手机看片一级片| 国产私拍一区| 日韩中文字幕网址| 亚洲v中文字幕| 国产精品66部|