搜尋
首頁Javajava教程一起來理解Java中的泛型

本篇文章為大家帶來了關於java的相關知識,其中主要介紹了關於泛型的相關問題,包括了自訂泛型類別、自訂泛型方法、自訂泛型介面等等內容,下面一起來看一下,希望對大家有幫助。

一起來理解Java中的泛型

推薦學習:《java影片教學

  • 泛型:是JDK5中引入的特性,可以在編譯階段約束操作的資料類型,並進行檢查。
  • 泛型的格式:,注意:泛型只能支援引用資料型別
  • 集合系統的全部介面和實作類別都是支援泛型的使用的。

優點:

  • 統一資料型態。
  • 把執行的問題提前到編譯期間,避免了強制型別轉換可能出現的問題,因為編譯階段型別便可以確定。
public static void main(String[] args) {
        List<string> list = new ArrayList();
        list.add("石原里美");
        list.add("工藤静香");
        list.add("朱茵");
        for (String s : list) {
            System.out.println(s);
        }
    }
输出结果:
石原里美
工藤静香
朱茵</string>

且泛型還可以在很多地方進行定義,例如在類別後面就是泛型類別、方法宣告上就是泛型方法、介面後面就是泛型介面。接下來我們一起來學習這些泛型是如何使用的: 

自訂泛型類別

概念

  •  定義類的同時定義了泛型的類別就是泛型類別。
  • 泛型類別的格式:修飾符class 類別名稱 {        }
public class MyArrayList<e>{    }</e>
  • #作用:編譯階段可以可以指定資料類型,類似集合的作用

實戰教學 

現創建一個泛型類,實現基本的增加、刪除操作,以此來具體了解其用法:

//泛型类MyArrayLIst
public class MyArrayLIst<e> {
    public void add(E e){

    }
    public void remove(E e){

    }
}
//main
public static void main(String[] args) {
        MyArrayLIst<string> list = new MyArrayLIst();
        //通过对泛型的设定,实现对数据专一处理
        list.add("石原里美");
        list.add("工藤静香");
        list.remove("工藤静香");
    }</string></e>

 泛型類別的原理:

把出現泛型變數的地方全部替換成傳輸的真實的資料型別。

透過認真觀察,其實不難去發現,泛型類別與普通類別的最大區別在於在呼叫方法的時候可以統一的對同一種資料進行處理,不會涉及到其他的資料類型,從一定程度上避免了強制類型轉換時可能會出現的問題。

自訂泛型方法 

 概念

  •  定義方法的同時定義了泛型的方法是泛型方法。
  • 泛型方法的格式:修飾符 傳回值型別方法名稱(形參考清單){        }
#
public <e> void view(E e){    }</e>
  • #作用:方法中可以使用泛型接收一切實際類型的參數,方法更具備通用性。
  • 注意:泛型方法需要區別於泛型類別中所定義的方法,雖然它們也在使用泛型,但是該泛型不是其定義的,而是泛型類別定義的。

實戰教學 

無論傳入何種類型的數組,都可以返回它的內容,即實現Arrays.toString()的作用

public static void main(String[] args) {
        String [] name = {"石原里美","工藤静香","朱茵"};
        view(name);
        Integer [] age = {18,19,20};
        view(age);
    }
    public static  <t> void view(T[] arr){
        StringBuilder list = new StringBuilder();
        for (int i = 0; i <p> 透過實現對泛型方法的定義,可以實現多種資料類型的接收,應用範圍更加廣泛。 </p>
<h2 id="自訂泛型介面">自訂泛型介面 </h2>
<h2 id="概念">概念 </h2>
<ul>
<li>使用泛型定義的介面就是泛型介面。 </li>
<li><span style="background-color:#ed7976;">泛型介面的格式:public interface People<e>{        }</e></span></li>##</ul>
<pre class="brush:php;toolbar:false">public interface People <e>{    }</e>
    作用:泛型介面可以讓實作類別選擇目前功能需要操作的資料型別
實戰教學 

定義一個People接口,實現對老師Teacher類別、學生Student等類別的操作

//People接口
public interface People <e>{
    void run(E e);
    void height(E e);
}
//Student类
public class Teacher {

}
//实现类Fantype
public class Fantype implements People<teacher> {

    @Override
    public void run(Teacher teacher) {

    }

    @Override
    public void height(Teacher teacher) {

    }
}</teacher></e>
透過對上述程式碼的觀察,可以發現,People後定義的是什麼類型,那麼實作類別只能對該種資料類型進行操作,其他類型不可以進行此操作。

通配符和上下限 

通配符 

  • ?可以在“使用泛型”的时候代表一切类型
  • E T K V是在定义泛型的时候用的 

 假设现在有一场为学生和老师而举办的比赛,需要比较速度究竟谁更快,分别创建一定数量的对象并将其传入集合之中。然而当我们将这两个集合分别传入方法中的时候,会发现,学生对象集合list2出现报错,为什么呢?原因是因为数据类型不同,那么该如何使得两种类型都可以传入呢?或许这个时候就会有人说了:“既然两个类都是People的子类,那么为什么不定义它的泛型是People呢?”这个想法很好,但是我们需要明确一点的是子类与父类虽然是有关系的,但是定义之后的集合是没有关系的,所以这里是行不通的。

//main
//老师对象集合
ArrayList<teacher> list1 = new ArrayList();
list1.add(new Teacher());
list1.add(new Teacher());
pk(list1);
//学生对象集合
ArrayList<student> list2 = new ArrayList();
list2.add(new student());
list2.add(new student());
pk(list2);//由于pk方法的形参是泛型为Teacher的集合,所以会报错
//父类
class People{

    }
//子类
class Teacher extends People{

    }
class student extends People{

    }
//pk方法:
public static void pk(ArrayList<teacher> people){
}</teacher></student></teacher>

应对这个问题,我们可以便可以将本篇文章引入的知识“通配符”放在实际应用中解决问题了,通过其简短的概念“?可以在‘使用泛型’的时候代表一切类型”就可以理解其作用了,这里我们可以使用“?”共同代表两种类型。

public static void pk(ArrayList> people){
//通过通配符?便可以将这个问题解决掉
    }

 上下限 

然而此时又出现一个问题,定义了一个dog类,试图创建一些对象并传入集合中混入比赛,这种当然情况当然是不允许发生的,然而?是可以表示任意类型的,并不能对其进行限制。因此上下限的作用就体现出来了:

  •  上限: extends 父类>,传入类型必须是该父类或者是父类的子类
  • 下限: super 子类>,传入类型必须是该子类或者是子类的父类
public static void pk(ArrayList extends People> people){
//通过上下限便可以将这个问题解决掉
//要求传入的类型必须是People的子类才可以
    }

推荐学习:《java视频教程

以上是一起來理解Java中的泛型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

java中封装是什么java中封装是什么May 16, 2019 pm 06:08 PM

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

归纳整理JAVA装饰器模式(实例详解)归纳整理JAVA装饰器模式(实例详解)May 05, 2022 pm 06:48 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器