1. 程式人生 > 實用技巧 >java 之 泛型

java 之 泛型

簡潔理論:

一、概述
	1、編寫程式碼更加方便
	2、增加安全性
二、宣告
	1、在類上宣告
		類名<泛型>
		如果多個,是用逗號隔開
		在整個類中都可以使用,除了靜態方法
	2、在方法上宣告
		<泛型> 返回值型別
		如果多個,使用逗號隔開
		在方法上的泛型僅在方法中有效
		方法的返回值,方法引數,方法一次都可以使用泛型
	3、範圍約束
		<T extends B> 窄化(用於宣告)
三、賦值
	1、在型別上賦值
		在定義引用時
	2、方法上泛型賦值
		在方法呼叫時
			顯示的
				呼叫時解除安裝方法名前面
			隱式的
				比如用什麼型別的變數接收方法返回值,則返回值的泛型就是什麼
四、泛型的使用
	1、不給泛型賦值,則預設是Object,如果是窄化的,則預設是extents後面的
	2、<?> 任意型別 <? super Number> 限定範圍 (注:此時是賦值)
	3、泛型資訊不會保留到執行時 

  

基礎案例:

package com.gongxy.genericity;

import com.sun.org.apache.xml.internal.serializer.ToSAXHandler;

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

/**
 * @author gongyg
 * @date 2020/8/25 10:04
 * @description 泛型類 <泛型單詞Genericity>
 */
public class GenericityDemoDo<T> {
    private T data;

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

    public T getData(){
        return this.data;
    }

    /*
    靜態方法不可以使用傳入的泛型類引數
    public static T getData(){
        return this.data;
    }
    */

    /**
     * 泛型方法
     */
    public static <K> K compareInteger(K k1, K k2){
        return ((Integer)k1 > (Integer)k2) ? k1 : k2;
    }

    @Override
    public String toString() {
        return "data:" + this.data;
    }

    public static void main(String[] args) {
        GenericityDemoDo<String> demoDo = new GenericityDemoDo<>();
        demoDo.setData("gongxy");
        System.out.println(demoDo.getData());
        System.out.println(GenericityDemoDo.<Integer>compareInteger(1, 2));
    }
}

/**
 * 定義的是一個類,而不是一個物件
 * 範圍約束
 */
class GenericityDemo2Do<T extends GenericityDemoDo<String>>{
    public <K> T print(K k1){
        GenericityDemoDo<String> demoDo = new GenericityDemoDo<>();
        demoDo.setData((String)k1);
        return (T)demoDo;
    }

    public static void main(String[] args) {
        GenericityDemo2Do<GenericityDemoDo<String>> demo2Do = new GenericityDemo2Do<>();
        String value = demo2Do.<String>print("123").getData();
        System.out.println(value);
    }
}

class GenericityDemo3Test{
    public static void main(String[] args) {
        List<? super Collection> list = new ArrayList<>();
        list.add(new ArrayList());
    }
}