偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

當(dāng)Java遇上泛型:類型安全的魔法之旅

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

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

泛型是jdk1.5之后出現(xiàn)的新特性,其本質(zhì)是參數(shù)化類型(type parameters),通過參數(shù)化類型讓代碼可以應(yīng)用于多種類型。

泛型是什么

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

常用的泛型變量

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

如果沒有泛型會(huì)怎么樣?

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);
    }
}

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

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. 適用于多種數(shù)據(jù)類型執(zhí)行相同的代碼
  2. 泛型中的類型在使用時(shí)指定,不需要強(qiáng)制轉(zhuǎn)換類型(類型安全,編譯器會(huì)檢查類型)

泛型的使用

泛型類

示例:

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();
}

實(shí)現(xiàn)接口時(shí),可以選擇指定泛型類型,也可以選擇不指定,如下:

指定類型:

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);
    }
}

泛型限制類型

在使用泛型時(shí),可以指定泛型的限定區(qū)域

  • 例如:必須是某某類的子類或 某某接口的實(shí)現(xiàn)類,格式:

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

泛型中的通配符 ?

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

public class Demo {
    public static void main(String[] args) {
        //上屆限定
        //不能將一個(gè)裝著蘋果的盤子,看做一個(gè)裝著水果的盤子
        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. 提高了代碼復(fù)用率
  2. 泛型中的類型在使用時(shí)指定,不需要強(qiáng)制類型轉(zhuǎn)換(類型安全,編譯器會(huì)檢查類型)

注意

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

在編譯過程中,正確檢驗(yàn)泛型結(jié)果后,會(huì)將泛型的相關(guān)信息擦除,并且在對象進(jìn)入和離開方法的邊界處添加類型檢查和類型轉(zhuǎn)換的方法。也就是說泛型信息不會(huì)進(jìn)入到運(yùn)行時(shí)階段。

總結(jié)

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

責(zé)任編輯:武曉燕 來源: Java技術(shù)指北
相關(guān)推薦

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

區(qū)塊鏈安全食品

2022-02-24 16:15:16

OpenHarmon鴻蒙OpenEuler

2013-05-22 09:33:09

交互設(shè)計(jì)設(shè)計(jì)時(shí)間

2016-10-21 15:57:39

Rust編輯語言Fedora

2011-04-13 09:16:55

泛型

2017-06-28 11:34:55

銳捷 醫(yī)療 物聯(lián)網(wǎng)

2015-01-07 15:49:21

大數(shù)據(jù)SSD

2017-08-18 14:47:31

DDD微服務(wù)架構(gòu)

2025-09-04 07:52:16

2013-03-20 09:27:33

C#泛型

2009-09-08 16:36:10

LINQ查詢基于泛型類

2022-06-19 22:54:08

TypeScript泛型工具

2009-08-24 14:51:25

C# 泛型泛型類型

2009-04-24 09:33:12

LINQ查詢非泛型

2017-05-16 14:38:25

2009-09-14 18:57:19

LINQ查詢

2013-11-08 09:15:32

大數(shù)據(jù)平板電腦
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)