Java泛型初探一 之 泛型類 、泛型接口 、泛型方法

學習鏈接+知識來源

摘自花瓣網(wǎng) 侵權刪

泛型類

常見的泛型類的使用:容器 Map<K ,V>

public class Container{
        
        private String key;

        private String value;

        public Container(String key, String value) {
            this.key = key;
            this.value = value;
        }
        public String getKey() {
            return key;
        }

        public void setKey(String key) {
            this.key = key;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }
    }

Container 類中保存類一對 key-value (String - String ) 鍵值對 , 但是該種寫法的可擴展性較差,如果需要保存一對 key-value (Integer - String ),那么該類不符合要求,要做的就是在重新定義一個類進行相關的操作。雖然可以通過 Object 來代替 String ,但是這樣靈活性還是不夠,只不過這次將數(shù)據(jù)類型定義為更高的數(shù)據(jù)類型而已。而泛型則實現(xiàn)了不指定數(shù)據(jù)類型,只有到了運行時才能夠知道具體的數(shù)據(jù)類型是什么。

栗子:

public class Cantainer < K , V >{

        private K key;
        
        private V value;

        public Cantainer(K key, V value) {
            this.key = key;
            this.value = value;
        }

        public K getKey() {
            return key;
        }

        public void setKey(K key) {
            this.key = key;
        }

        public V getValue() {
            return value;
        }

        public void setValue(V value) {
            this.value = value;
        }
    }

在編譯期間是無法知道具體的 K 和 V 是什么數(shù)據(jù)類型, 只有在運行時才會真正的根據(jù)具體的數(shù)據(jù)類型來進行構造和分配內(nèi)存。
對泛型類的具體使用:

public class Main {

    public static void main(String[] args) {
        Container<String, String> c1 = new Container<String, String>("key", "value");
        Container<String, Integer> c2 = new Container<String, Integer>("age", 24);
        Container<Double, Double> c3 = new Container<Double, Double>(1.1, 2.2);
        System.out.println(c1.getKey() + " : " + c1.getValue());
        System.out.println(c2.getKey() + " : " + c2.getValue());
        System.out.println(c3.getKey() + " : " + c3.getValue());
    }
}

輸出:

key : value
age : 24
1.1 : 2.2

泛型接口

具體栗子:

 public interface Generator<T>{
        public T next();
    }

 public class MyGenerator implements Generator<String>{
        
        @Override
        public  String next(){
           return "泛型類 返回值 generator"; 
        }
    }

需要注意的是在實現(xiàn)接口時要指明具體的數(shù)據(jù)類型 Generator<String>
具體調(diào)用:

public class Main {
    public static void main(String[] args) {
        MyGenerator generator = new MyGenerator();
        System.out.println(generator.next());
    }
}

輸出:

泛型類 返回值 generato

在相應類的具體實現(xiàn)中(具體實現(xiàn)指的是:接口 Generator 的實現(xiàn)類 MyGenerator 指定MyGenerator<String>)可以指定接口泛型 T 的數(shù)據(jù)類型(本栗子中指定 T 的數(shù)據(jù)類型為 String ),從而指定了接口方法的數(shù)據(jù)返回值類型--String 。

泛型方法

一個基本的原則: 無論如何,只要你能做到,就應該使用泛型方法. 也就是說,如果泛型方法能將整個類泛化,那么應該優(yōu)先使用泛型方法。
栗子說明泛型方法的定義:

public class Method
{
    public static <T> void out (T t){
        System.out.print(t);
    }

    public static void main(String[] args) {
        
        out("124");

        out(true);

        out(124);
    }
}

注意: <T>是為了規(guī)范參數(shù);T表示的是返回值類型.

從上面的栗子我們可以看到方法的參數(shù)徹底泛型化了,這個過程涉及到編譯器的類型推導和自動打包,也就是說原來我們需要自己對類型進行判斷和處理,現(xiàn)在這些事情編譯器幫我們完成了。這樣的話,在定義方法的時候就不必考慮以后到底需要處理哪些類型的參數(shù),這樣大大的增加了編程的靈活性。

補充:

java 泛型
泛型 ?和 T 的區(qū)別

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,441評論 6 13
  • 在之前的文章中分析過了多態(tài),可以知道多態(tài)本身是一種泛化機制,它通過基類或者接口來設計,使程序擁有一定的靈活性,但是...
    _小二_閱讀 758評論 0 0
  • 大雪過后是大雪, 清冷過罷是冷清, 寂寥歲歲有, 無思日日深。
    碧藤院落閱讀 296評論 0 3
  • 本文參加#感悟三下鄉(xiāng),青春筑夢行#活動,本人承諾,文章內(nèi)容為原創(chuàng),且未在其他平臺發(fā)表過。 踐行三下鄉(xiāng),青春志愿行。...
    麥麥麥格兒閱讀 627評論 0 0
  • 記得暑假的時候,我姑姑來我家串門,帶著剛上高一的表弟,專程來找我弟弟賜教學習的秘訣,一邊夸獎我弟弟學習多么多么好,...
    陌上寸草_cd84閱讀 371評論 1 0

友情鏈接更多精彩內(nèi)容