Java泛型的學習和應用

在JAVA中返回類型使用泛型T和Object有什麼區別?

link:https://www.cnblogs.com/jpfss/p/9928563.html

 

 

 

 

 

 

 

 

 

Java之泛型<T> T與T的用法

link:https://www.cnblogs.com/jpfss/p/9929108.html

<T> T表示返回值是一個泛型,傳遞啥,就返回啥類型的數據,而單獨的T就是表示限制你傳遞的參數類型,這個案例中,通過一個泛型的返回方式,獲取每一個集合中的第一個數據, 通過返回值<T> T 和T的兩種方法實現

<T> T 用法

這個<T> T 表示的是返回值T是泛型,T是一個佔位符,用來告訴編譯器,這個東西先給我留着,等我編譯的時候,告訴你。

package com.yellowcong.test;

import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.formula.functions.T;

public class Demo {

    public static void main(String[] args) {

        Demo demo = new Demo();

        //獲取string類型
        List<String> array = new ArrayList<String>();
        array.add("test");
        array.add("doub");
        String str = demo.getListFisrt(array);
        System.out.println(str);

        //獲取nums類型
        List<Integer> nums = new ArrayList<Integer>();
        nums.add(12);
        nums.add(13);

        Integer num = demo.getListFisrt(nums);
        System.out.println(num);
    }

    /**
     * 這個<T> T 可以傳入任何類型的List
     * 參數T
     *     第一個 表示是泛型
     *     第二個 表示返回的是T類型的數據
     *     第三個 限制參數類型爲T
     * @param data
     * @return
     */
    private <T> T getListFisrt(List<T> data) {
        if (data == null || data.size() == 0) {
            return null;
        }
        return data.get(0);
    }

}

T 用法

返回值,直接寫T表示限制參數的類型,這種方法一般多用於共同操作一個類對象,然後獲取裏面的集合信息啥的。

package com.yellowcong.test;

import java.util.ArrayList;
import java.util.List;

public class Demo2<T> {

    public static void main(String[] args) {

        //限制T 爲String 類型
        Demo2<String> demo = new Demo2<String>();

        //獲取string類型
        List<String> array = new ArrayList<String>();
        array.add("test");
        array.add("doub");
        String str = demo.getListFisrt(array);
        System.out.println(str);

        //獲取Integer類型 T 爲Integer類型
        Demo2<Integer> demo2 = new Demo2<Integer>();
        List<Integer> nums = new ArrayList<Integer>();
        nums.add(12);
        nums.add(13);
        Integer num = demo2.getListFisrt(nums);
        System.out.println(num);
    }

    /**
     * 這個只能傳遞T類型的數據
     * 返回值 就是Demo<T> 實例化傳遞的對象類型
     * @param data
     * @return
     */
    private T getListFisrt(List<T> data) {
        if (data == null || data.size() == 0) {
            return null;
        }
        return data.get(0);
    }
}

 

Java泛型

泛型即是參數化類型,就是將具體的類型參數化。在方法參數中將類型定義爲形參,當在調用時傳入具體的類型(實參)。

 

要點

泛型類

public class GenericClazz<T> {

    private T data;

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

    public T getData() {
        return data;
    }

    public static void main(String[] args) {
        GenericClazz<String> stringCLazz = new GenericClazz<>();
        stringCLazz.setData("I am String type");
        System.out.println(stringCLazz.getData());

        GenericClazz<Integer> integerClazz = new GenericClazz<>();
        integerClazz.setData(9999);
        System.out.println(String.format("I am Integer type: %d", integerClazz.getData()));
    }
}

<T> T標記的泛型方法

    /**
     * 泛型方法
     * 1. <T>聲明此方法爲泛型方法
     * 2. <T>表明該方法可以並僅限於使用泛型類型T
     * 3. 此處的T可以爲任意寫爲任意標識,常見的如T、E、K、V等
     *
     * @param type 傳入的泛型實參
     * @param <T> 返回值爲T類型
     * @return
     * @throws IllegalAccessException
     * @throws InstantiationException
     */
    public <T> T genericMethod(Class<T> type) throws IllegalAccessException, InstantiationException {
        T instance = type.newInstance();
        return instance;
    }

    public <T> GenericClazz<T> genericMethod2(Class<T> type) {
        return new GenericClazz<>();
    }

 

參考

https://www.jianshu.com/p/986f732ed2f1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章