天天看點

泛型

什麼是泛型

代碼模闆

定義和使用含有泛型的類

在沒有用泛型之前

如果要獲得某個變量類型是什麼 比如String Int 等等

需要單獨寫一個類來進行

public class GenericTest{
	public String name;
	
	public GenerciTest(T name) {
        this.name = name;
    }
	
	public static void main(String[] args){
		System.println.out("name的類型是:"+name.getClass().getName())
	}
}
           

後面判斷int float 等等 或者 自定義的類 那寫不完的類判斷

是以

泛型

應運而生

泛型類

public class GenerciTest<T> {
    private T t;

    public T getT() {
        return t;
    }

    public void setName(T t) {
        this.t = t;
    }

    public GenerciTest(T t) {
        this.t = t;
    }

    public void say() {
        System.out.println("t的類型是:" + t.getClass().getName());
    }
}
           

建立的時候确定 T 是什麼類型

個人了解

T

類型變量

好比如 定義一個 變量 public String name = "111";

name

是儲存

111字元串

的變量

T

可以了解為 儲存

資料類型

的一個變量 String Integer Char 還有

自定義類

等等

泛型

省去了

大量重複的代碼

定義和使用含有泛型的方法

package com.generci.day01.sec01;

/**
 * 定義和使用含有泛型的方法
 */
public class Demo02 {
    public static <T> void print(T t){
        System.out.println(t.getClass().getName());
    }

    public static void main(String[] args) {
        print("");
        print(66);
        print(66.33);
        print('A');
        print(true);
    }
}
           

調用方法的時候确定泛型的類型

輸出

泛型

定義和使用含有泛型的接口

GenericInterface

接口

package com.generci.day01.sec02;

/**
 * 接口上定義泛型
 *
 * 使用接口的時候确定泛型的類型
 * @param <T>
 */
public interface GenericInterface<T> {
    /**
     * 添加
     * @param t
     */
    void add(T t);


    /**
     * ‘更新
     * @param index
     * @return
     */
    T get(Integer index);
}
           

Demo01

package com.generci.day01.sec02;

/**
 * 定義和使用含有泛型的接口
 *
 * 确定泛型的類型
 */
public class Demo01 implements GenericInterface<String>{
    @Override
    public void add(String s) {

    }

    @Override
    public String get(Integer index) {
        return null;
    }
}
           

實作

GenericInterface

接口時 确定了

T

類型 為

String

Demo02

package com.generci.day01.sec02;

/**
 * 定義和使用含有泛型的接口
 *
 * 始終不确定泛型的類型,直到建立對象時,确定泛型的類型
 */
public class Demo02<T> implements GenericInterface<T> {
    @Override
    public void add(T t) {

    }

    @Override
    public T get(Integer index) {
        return null;
    }
}
           

測試

泛型

建立對象的時候确定了

T

的具體類型是

Integer

調用add方法時 虛拟機會自動将

T

類型變成

Integer

小結

T

不能是

基本類型

泛型就是編寫

模闆

代碼來适應任意類型

定義在

上的泛型 使用

的時候會确定泛型的類型

方法

方法

接口

接口

未指明

T

類型時 編譯器預設為

Object

即使再小的帆也能遠航