成人免费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技術棧公眾號

主站蜘蛛池模板: 欧美日韩久久久 | 九九热最新地址 | 天天操夜夜爽 | 久久视频一区 | 91丨国产 | 国产免费av在线 | 日本久久网站 | 免费看黄色小视频 | 欧美手机在线 | www网站在线观看 | 精品国产一区二区三区久久久四川 | 国产1区2区在线观看 | 日韩精品一区二区三区免费观看 | 国产视频福利一区 | 久久这里有精品 | 欧美一级二级三级 | 日韩欧美字幕 | 国产亚洲精品久久久久动 | 婷婷在线视频 | 免费一区二区三区 | 国产一区二区三区色淫影院 | 国产精品久久国产精品 | 99久久精品免费看国产免费软件 | 成人性生交大片 | 日韩欧美在线观看视频 | 欧美一级黄色片 | 成人免费视频观看视频 | 另类 综合 日韩 欧美 亚洲 | 一级黄色录像毛片 | 97国产爽爽爽久久久 | www.天天操| 久久国内精品 | av在线一区二区三区 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 国产免费一区二区三区网站免费 | www.久久久久久久久 | 日日干夜夜操 | 国产一区二区日韩 | 男女污污动态图 | 午夜视频在线免费观看 | 天天干天天操 |