成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

當Java遇上泛型:類型安全的魔法之旅

開發 前端
泛型,即“參數化類型”,就是將類型由原來的具體類型參數化,類似于方法中的變量參數,此時類型也定義成參數形式(可以稱之為類型形參),然后在使用/調用時傳入具體的類型(類型實參)。

哈嘍,大家好,我是了不起。

泛型是jdk1.5之后出現的新特性,其本質是參數化類型(type parameters),通過參數化類型讓代碼可以應用于多種類型。

泛型是什么

泛型,即“參數化類型”,就是將類型由原來的具體類型參數化,類似于方法中的變量參數,此時類型也定義成參數形式(可以稱之為類型形參),然后在使用/調用時傳入具體的類型(類型實參)。

常用的泛型變量

  • Element(E):元素,多用于java框架集合
  • Key(K) :關鍵字
  • Number(N) : 數字
  • Type(T) : 類型
  • Value(V) : 值

如果沒有泛型會怎么樣?

public class Demo {

    public static int add(int a ,int b){
        return a+b;
    }

    public  static  float add(float a,float b){
        return a+b;
    }
    
    public static void main(String[] args) {
        Demo.add(1, 2);
        Demo.add(1f, 2f);
    }
}

如果我們利用泛型,只需要定義一個方法

public class Demo {

    public static <T extends Number> int add(T a, T b) {
        System.out.println(a + "+" + b + "=" + (a.intValue() + b.intValue()));
        return a.intValue() + b.intValue();
    }

    public static void main(String[] args) {
        Demo.add(1, 2);
        Demo.add(1f, 2f);
    }
}

所以泛型的意義在于

  1. 適用于多種數據類型執行相同的代碼
  2. 泛型中的類型在使用時指定,不需要強制轉換類型(類型安全,編譯器會檢查類型)

泛型的使用

泛型類

示例:

public class DemoT<T> {
    private T data;

    public T getData(){
        return data;
    }

    public void setData(){
        this.data = data;
    }
}

案例

@Data
public class Person<A> {
    private  String name;
    private int age;
    private A data;
}

public class Demo {
    public static void main(String[] args) {
        //傳入String類型
        DemoT<String> t = new DemoT<>(); 
        t.setData("泛型");
    }
}

泛型接口

示例:

public interface IntercaceName<T> {
    T getData();
}

實現接口時,可以選擇指定泛型類型,也可以選擇不指定,如下:

指定類型:

public class Interface1 implements IntercaceName<String>{
    private String text;
    @Override
    public String getData() {
        return text;
    }
}

不指定類型:

public class Interface1<T> implements IntercaceName<T>{
    private T text;
    @Override
    public T getData() {
        return text;
    }
}

泛型方法

示例:

private static <T> T 方法名 (T a,T b){}

public class Demo {
    public static void main(String[] args) {
        print("泛型");
    }
    public static <A> void print(A a){
        System.out.println(a);
    }
}

泛型限制類型

在使用泛型時,可以指定泛型的限定區域

  • 例如:必須是某某類的子類或 某某接口的實現類,格式:

<T extends 類或接口1 & 接口2>

泛型中的通配符 ?

//1. <? extends Parent> 指定了泛型類型的上屆
//2. <? super Child> 指定了泛型類型的下屆
//3. <?> 指定了沒有限制的泛型類型

public class Demo {
    public static void main(String[] args) {
        //上屆限定
        //不能將一個裝著蘋果的盤子,看做一個裝著水果的盤子
        Plants<? extends Fruit> p = new Plants<Apple>();
        //下屆限定
        Plants<? super Apple> p1 = new Plants<Fruit>();
    }
}
interface Fruit{}
class Apple implements Fruit{}
class Plants<T>{
    T data;
}

作用

  1. 提高了代碼復用率
  2. 泛型中的類型在使用時指定,不需要強制類型轉換(類型安全,編譯器會檢查類型)

注意

在編譯之后程序會采取去泛型化的措施,也就是說Java中的泛型,只在編譯階段有效。

在編譯過程中,正確檢驗泛型結果后,會將泛型的相關信息擦除,并且在對象進入和離開方法的邊界處添加類型檢查和類型轉換的方法。也就是說泛型信息不會進入到運行時階段。

總結

相信大家日常工作中肯定是經常用到泛型,尤其是集合的使用。有時候也會自定泛型來簡化代碼,一句話就是能用泛型就盡量用泛型。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2019-09-04 00:20:10

JSON泛型擦除

2011-03-16 14:51:35

2025-06-06 04:00:00

2020-12-22 09:31:43

區塊鏈安全食品

2013-05-22 09:33:09

交互設計設計時間

2016-10-21 15:57:39

Rust編輯語言Fedora

2022-02-24 16:15:16

OpenHarmon鴻蒙OpenEuler

2011-04-13 09:16:55

泛型

2017-06-28 11:34:55

銳捷 醫療 物聯網

2015-01-07 15:49:21

大數據SSD

2017-08-18 14:47:31

DDD微服務架構

2013-03-20 09:27:33

C#泛型

2009-09-08 16:36:10

LINQ查詢基于泛型類

2022-06-19 22:54:08

TypeScript泛型工具

2009-04-24 09:33:12

LINQ查詢非泛型

2009-08-24 14:51:25

C# 泛型泛型類型

2017-05-16 14:38:25

2009-09-14 18:57:19

LINQ查詢

2009-03-21 16:43:29

SOA虛擬化IT

2013-08-22 11:08:27

大數據商業只能Hadoop
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区二区三区在线观看 | 欧美日韩国产精品一区 | 99自拍视频 | 亚洲风情在线观看 | 午夜精品一区二区三区在线播放 | 人人爱干 | 亚洲一区二区三区在线免费 | 一区二区在线看 | 欧美黄a| 日韩免费视频一区二区 | 成人在线免费观看av | 国产精品99久久久久久久久久久久 | 日本免费一区二区三区视频 | 久久一区二区三区四区 | 亚洲免费一区二区 | 三级黄色片在线观看 | 国产精品123区 | 亚洲一区二区三区在线视频 | 午夜精品在线观看 | 天天天操天天天干 | 国产成人99久久亚洲综合精品 | 亚洲美乳中文字幕 | 理论片免费在线观看 | 一级日批片 | 久久在线视频 | 欧美精品一区二区三区在线 | 亚洲人成人一区二区在线观看 | 精品国产乱码久久久久久影片 | 黑人巨大精品欧美一区二区免费 | 国产精品久久网 | 久久一区二| www中文字幕 | 中文字幕精品一区二区三区精品 | 成人a网| 精品一区二区三区在线观看国产 | 成人不卡| 亚洲精品久久久久久一区二区 | 欧美男人天堂 | 亚洲成人国产 | 久久偷人 | 国产一区二区三区四区五区加勒比 |