最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDK10新特性之var泛型和多個接口實現方法

 更新時間:2020年05月18日 09:26:51   作者:flydean  
這篇文章主要介紹了JDK10的新特性:var泛型和多個接口實現方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

簡介

在JDK10的新特性:本地變量類型var中我們講到了為什么使用var和怎么使用var。

今天我們來深入的考慮一下var和泛型,多個接口實現的問題。

實現多個接口

在JDK的實現和我們日常的工作中,很多時候都需要實現多個接口,我們舉常用的兩個例子ArrayList和CopyOnWriteArrayList。先看下他們的定義:

public class ArrayList<E> extends AbstractList<E>
 implements List<E>, RandomAccess, Cloneable, java.io.Serializable
public class CopyOnWriteArrayList<E>
 implements List<E>, RandomAccess, Cloneable, java.io.Serializable 

我們可以看到ArrayList和CopyOnWriteArrayList都實現了List,RandomAccess,Cloneable,Serializable這四個接口。

如果我們有一個ArrayList creater,可以創(chuàng)建ArrayList或者CopyOnWriteArrayList中的一個,那么代碼應該怎么寫呢?

 public Object createList(boolean flag){
 if(flag){
  return new ArrayList<>();
 }else{
  return new CopyOnWriteArrayList<>();
 }
 }

因為返回的值可能是ArrayList也可能是CopyOnWriteArrayList,我們只能以Object來替代要返回的對象。

如果返回了Object就沒有了泛型帶來的優(yōu)勢,有沒有什么方法讓我們清楚的知道要返回的對象到底是什么類型的呢?

大家第一個想到的可能就是創(chuàng)建一個新的接口,繼承List, RandomAccess, Cloneable, java.io.Serializable,然后createList返回該新創(chuàng)建的接口即可。

public interface ListInterface<E> 
extends List<E>, RandomAccess, Cloneable, 
java.io.Serializable 
{
}

然后把createList方法改寫:

public <E> ListInterface<E> createListWithInterface(boolean flag)
{
 if(flag){
  return (ListInterface<E>) new ArrayList<E>();
 }else{
  return (ListInterface<E>) new CopyOnWriteArrayList<E>();
 }
 }

新的方法可以帶泛型,并且明確的表明了要返回的是一個ListInterface。

新生成的ListInterface在你自己的代碼中使用是沒有問題的,考慮一下,如果你的代碼被別人引用,或者作為一個公共庫來被別人使用,第三方可能根本就不知道你的新創(chuàng)建的ListInterface到底是做什么的。

我們能不能使用一種更加直觀的方法來創(chuàng)建List呢?答案當然是可以的,看下面的例子:

public <T extends List<E> & RandomAccess & Cloneable & java.io.Serializable, E> 
T createListWithInterfaceT(boolean flag){
 if(flag){
  return (T) new ArrayList<E>();
 }else{
  return (T) new CopyOnWriteArrayList<E>();
 }
 }

上面的例子中,我們使用了泛型T同時繼承了4個接口。然后將創(chuàng)建的List轉換成T返回。

這樣我們即得到了ArrayList和CopyOnWriteArrayList的公共類型,也不需要創(chuàng)建新的接口。

使用多個接口

上面我們創(chuàng)建了一個實現多個接口的泛型T。那么如果要使用它該怎么做呢?

public <T extends List<E> & RandomAccess & Cloneable & java.io.Serializable, E>
 void useGenericityType(){
 VarGenericity varGenericity=new VarGenericity();
 T list=varGenericity.createListWithInterfaceT(true);
 }

為了在方法內部使用T,我們必須在方法定義上面再重新申明一次T的定義。

這么做雖然可以實現我們的功能,但是實在是太麻煩了。

使用var

這個時候就可以使用var變量來替代了,我們看下下面的例子:

public void useVarInGenericityType(){
 VarGenericity varGenericity=new VarGenericity();
 var list=varGenericity.createListWithInterfaceT(true);
 }

是不是很簡單,并且var list變量保留了四個接口的所有公共方法。

總結

本文介紹了泛型在多個接口實現中的具體例子,并使用var來精簡代碼。

本文的例子[ https://github.com/ddean2009/

learn-java-base-9-to-20](https://github.com/ddean2009/ ...

到此這篇關于JDK10新特性之var泛型和多個接口實現方法的文章就介紹到這了,更多相關JDK10 var泛型和多個接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文掌握Java中的JWT

    一文掌握Java中的JWT

    這篇文章主要介紹了Java中的JWT,JWT的本質就是一個字符串,它是將用戶信息保存到一個Json字符串中,然后進行編碼后得到一個JWT?token,對JWT相關知識感興趣的朋友一起看看吧
    2022-06-06
  • Java實現單向鏈表反轉

    Java實現單向鏈表反轉

    這篇文章主要為大家詳細介紹了Java實現單向鏈表反轉,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • pom.xml中解決Provides?transitive?vulnerable?dependency?maven:org.yaml:snakeyaml:1.33警告問題

    pom.xml中解決Provides?transitive?vulnerable?dependency?mave

    這篇文章主要介紹了在pom.xml中如何解決Provides?transitive?vulnerable?dependency?maven:org.yaml:snakeyaml:1.33警告問題,需要的朋友可以參考下
    2023-06-06
  • 舉例解析Java的設計模式編程中里氏替換原則的意義

    舉例解析Java的設計模式編程中里氏替換原則的意義

    這篇文章主要介紹了Java的設計模式中里氏替換原則的意義,文中舉例來說明里氏替換原則中強調的繼承特性方面可能帶來的問題,需要的朋友可以參考下
    2016-02-02
  • Java中的HashMap和Hashtable區(qū)別解析

    Java中的HashMap和Hashtable區(qū)別解析

    這篇文章主要介紹了Java中的HashMap和Hashtable區(qū)別解析,HashMap和Hashtable都實現了Map接口,但決定用哪一個之前先要弄清楚它們之間的區(qū)別,主要的區(qū)別有線程安全性、同步和速度,需要的朋友可以參考下
    2023-11-11
  • 使用Java實現驗證碼程序

    使用Java實現驗證碼程序

    這篇文章主要為大家詳細介紹了使用Java實現驗證碼程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 使用通過ARP類似P2P終結者實現數據封包

    使用通過ARP類似P2P終結者實現數據封包

    目前網絡上類似P2P終結者這類軟件,主要都是基于ARP欺騙實現的,網絡上到處都有關于ARP的介紹,不過為了本文讀者不需要再去查找,我就在這里大概講解一下
    2012-12-12
  • javaSE中異常如何處理舉例詳解

    javaSE中異常如何處理舉例詳解

    程序運行過程中發(fā)生了不正常的情況,這種不正常的情況叫做異常,下面這篇文章主要給大家介紹了關于javaSE中異常如何處理的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • IntelliJ idea 如何生成動態(tài)的JSON字符串(步驟詳解)

    IntelliJ idea 如何生成動態(tài)的JSON字符串(步驟詳解)

    這篇文章主要介紹了IntelliJ idea 如何生成動態(tài)的JSON字符串,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • mybatis的selectKey作用詳解

    mybatis的selectKey作用詳解

    這篇文章主要介紹了mybatis的selectKey作用詳解,具有很好的參考價值,希望對大家有所幫助。以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。</P><P>
    2022-01-01

最新評論

禄丰县| 江陵县| 仙桃市| 蚌埠市| 察隅县| 临西县| 伽师县| 砚山县| 公安县| 平泉县| 库车县| 光山县| 镶黄旗| 民勤县| 文昌市| 桦南县| 出国| 措勤县| 渭源县| 炉霍县| 六安市| 台中市| 潜江市| 牡丹江市| 临江市| 盐亭县| 左权县| 南阳市| 台中市| 甘南县| 揭西县| 安西县| 林西县| 修武县| 昭通市| 淮北市| 昌邑市| 上林县| 银川市| 历史| 克什克腾旗|