国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java8中新特性Optional、接口中默認方法和靜態方法詳解

Java8中新特性Optional、接口中默認方法和靜態方法詳解

2021-03-12 14:24我不是李大俠 Java教程

Java 8 已經發布很久了,很多報道表明Java 8 是一次重大的版本升級。下面這篇文章主要給大家介紹了關于Java8中新特性Optional、接口中默認方法和靜態方法的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。

前言

毫無疑問,Java 8是Java自Java 5(發布于2004年)之后的最重要的版本。這個版本包含語言、編譯器、庫、工具和JVM等方面的十多個新特性。

Java 8是Java的一個重大版本,有人認為,雖然這些新特性領Java開發人員十分期待,但同時也需要花不少精力去學習。下面本文就給大家詳細介紹了Java8中新特性Optional接口中默認方法和靜態方法的相關內容,話不多說了,來一起看看詳細的介紹吧。

Optional

Optional 類(java.util.Optional) 是一個容器類,代表一個值存在或不存在,原來用 null 表示一個值不存在,現在 Optional 可以更好的表達這個概念。并且可以避免空指針異常。

常用方法:

  • Optional.of(T t) : 創建一個 Optional 實例。
  • Optional.empty() : 創建一個空的 Optional 實例。
  • Optional.ofNullable(T t) 若 t 不為 null,創建 Optional 實例,否則創建空實例。
  • isPresent() : 判斷是否包含值。
  • orElse(T t) : 如果調用對象包含值,返回該值,否則返回t。
  • orElseGet(Supplier s) :如果調用對象包含值,返回該值,否則返回 s 獲取的值。
  • map(Function f)  如果有值對其處理,并返回處理后的Optional,否則返回 Optional.empty()
  • flatMap(Function mapper) 與 map 類似,要求返回值必須是Optional。

下面引用ImportNew的一段內容來告訴我們如何正確使用Optional。比如千萬不要寫成這樣子:

?
1
2
3
4
5
6
public static String getName(User u) {
 Optional<User> user = Optional.ofNullable(u);
 if (!user.isPresent())
 return "Unknown";
 return user.get().name;
}

這樣改寫非但不簡潔,而且其操作還是和第一段代碼一樣。無非就是用isPresent方法來替代u==null。這樣的改寫并不是Optional正確的用法,我們再來改寫一次。

?
1
2
3
4
5
public static String getName(User u) {
 return Optional.ofNullable(u)
     .map(user->user.name)
     .orElse("Unknown");
}

這樣才是正確使用Optional的姿勢。那么按照這種思路,我們可以安心的進行鏈式調用,而不是一層層判斷了。看一段代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
public static String getChampionName(Competition comp) throws IllegalArgumentException {
 if (comp != null) {
  CompResult result = comp.getResult();
  if (result != null) {
   User champion = result.getChampion();
   if (champion != null) {
    return champion.getName();
   }
  }
 }
 throw new IllegalArgumentException("The value of param comp isn't available.");
}

由于種種原因(比如:比賽還沒有產生冠軍、方法的非正常調用、某個方法的實現里埋藏的大禮包等等),我們并不能開心的一路comp.getResult().getChampion().getName()到底。而其他語言比如kotlin,就提供了在語法層面的操作符加持:comp?.getResult()?.getChampion()?.getName() 所以講道理在Java里我們怎么辦!

讓我們看看經過Optional加持過后,這些代碼會變成什么樣子。

?
1
2
3
4
5
6
7
public static String getChampionName(Competition comp) throws IllegalArgumentException {
 return Optional.ofNullable(comp)
   .map(c->c.getResult())
   .map(r->r.getChampion())
   .map(u->u.getName())
   .orElseThrow(()->new IllegalArgumentException("The value of param comp isn't available."));
}

這就很舒服了。Optional的魅力還不止于此,Optional還有一些神奇的用法,比如Optional可以用來檢驗參數的合法性。

?
1
2
3
4
public void setName(String name) throws IllegalArgumentException {
 this.name = Optional.ofNullable(name).filter(User::isNameValid)
      .orElseThrow(()->new IllegalArgumentException("Invalid username."));
}

上面代碼引用importnew—Java8 如何正確使用 Optional。

接口中的默認方法與靜態方法

Java8接口中可以添加靜態方法,也可以添加默認方法,默認方法用 default修飾。

?
1
2
3
4
5
6
7
8
public interface Fun<T> {
 default void getName(){
  System.out.println("hello world");
 }
 static void getAge(){
  System.out.println("nine");
 }
}

若一個接口中定義了一個默認方法,他的實現類的一個父類定義了具有相同名稱和參數列表的方法。則調用該實現類的時候執行父類中的方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class TestF {
 public void getName(){
  System.out.println("TestF");
 }
}
public interface TestInterface {
 default void getName(){
  System.out.println("hello world");
 }
}
public class Test extends TestF implements TestInterface{
 public static void main(String[] args) {
  Test t = new Test();
  t.getName();//輸出的是TestF
 }
}

若一個實現類實現了兩個接口,如果一個父接口提供一個默認方法,而另一個父接口也提供了一個具有相同名稱和參數列表的方法(不管方法是否是默認方法),那么必須覆蓋該方法來解決沖突,否則會報錯。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public interface TestInterface {
 default void getName(){
  System.err.println("hello world");
 }
}
public interface TestInterface1 {
  void getName();
}
public class Test1 implements TestInterface, TestInterface1{
 public void getName(){
  System.out.println("Tes1F");
 }
}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://blog.csdn.net/l18637220680/article/details/78709024?

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品影院 | 亚洲免费国产视频 | 久久久亚洲国产美女国产盗摄 | 国产3区 | 亚洲一区二区中文字幕 | 日韩毛片 | 亚洲成人福利 | 亚洲成人黄色 | 欧美一区二区在线播放 | 欧美一级在线观看 | 电影在线观看免费 | 久久一区二区视频 | 国产亚洲欧美一区 | 欧美一区二区网站 | 亚洲精品视频观看 | 国产精品久久一区 | 国产99在线 | 亚洲 | 黄色三级免费网站 | 成人夜色av | 成人免费视频亚洲 | 日韩在线播放一区二区三区 | a在线观看 | 成人在线一区二区三区 | 亚洲国产成人久久 | 一区影院 | 免费观看特级毛片 | 午夜成人在线视频 | 一级免费视频 | 亚洲电影在线观看 | 国产精品一区久久久 | 精品国产乱码久久久久久牛牛 | 久久国产一区二区 | 久草电影在线观看 | av中文字幕免费在线观看 | 午夜成人影视 | 一区二区三区亚洲 | 北条麻妃在线一区二区三区 | 在线成人国产 | 欧美激情在线精品一区二区三区 | 一区二区蜜桃 | 国产福利一区二区三区四区 |