黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java方法:泛型的簡介

Java方法:泛型的簡介

更新時間:2022-12-29 11:24:34 來源:動力節點 瀏覽1236次

泛型定義

Java 泛型(generics)本質是參數化類型,也就是說所操作的Java數據類型被指定為一個參數。是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許程序員在編譯時檢測到非法的類型。

你可以寫一個泛型方法,該方法在調用時可以接收不同類型的參數。根據傳遞給泛型方法的參數類型,編譯器適當地處理每一個方法調用。

使用泛型的意義

1.適用于多種數據類型執行相同的代碼(代碼復用)

未使用泛型前,針對不同的參數類型需要對函數作重載操作

private static int add(int a, int b) {
    System.out.println(a + "+" + b + "=" + (a + b));
    return a + b;
}
private static float add(float a, float b) {
    System.out.println(a + "+" + b + "=" + (a + b));
    return a + b;
}
private static double add(double a, double b) {
    System.out.println(a + "+" + b + "=" + (a + b));
    return a + b;
}

使用泛型后,可以將多種參數類型情況復用為一個函數

private static <T extends Number> double add(T a, T b) {
    System.out.println(a + "+" + b + "=" + (a.doubleValue() + b.doubleValue()));
    return a.doubleValue() + b.doubleValue();
}

泛型的使用情況

1.泛型類

public class TClass {
    public static void main(String[] args) {
        TClass00<String, Object> tClass = new TClass00<>();
        tClass.setKey("hello");
        tClass.setValue("world");
        System.out.println(tClass.getKey() + " " + tClass.getValue());
        tClass.setValue(0.0);
        System.out.println(tClass.getKey() + " " + tClass.getValue());
    }
}
// 泛型類
class TClass00<K, V> {
    private K key;
    private V value;
    public K getKey() {
        System.out.println(key.getClass());
        return key;
    }
    public void setKey(K key) {
        this.key = key;
    }
    public V getValue() {
        System.out.println(value.getClass());
        return value;
    }
    public void setValue(V value) {
        this.value = value;
    }
}
// 輸出結果
class java.lang.String
class java.lang.String
hello world
class java.lang.String
class java.lang.Double
hello 0.0

2.泛型接口

public class TImpl {
    public static void main(String[] args) {
        TImpl00<Float> tImpl00 = new TClass00<>();
        tImpl00.hello(0.0f);
    }
}
// 定義泛型接口
interface TImpl00<T> {
    T hello(T t);
}
// 定義接口的子類
class TClass00<T> implements TImpl00<T>{
    @Override
    public T hello(T t) {
        System.out.println(t.getClass());
        System.out.println("hello " + t.toString());
        return t;
    }
}
// 輸出結果
class java.lang.Float
hello 0.0

3.泛型方法

public class TMethods {
    public static void main(String[] args) {
        System.out.println("hello".getClass());
        getClass("hello".getClass());
    }    
    /**
     * 定義泛型方法的規則:
     *      1.所有泛型方法聲明都有一個類型參數聲明部分(由尖括號分隔),該類型參數聲明部分在方法返回類型之前
     *      2.每一個類型參數聲明部分包含一個或多個類型參數,參數間用逗號隔開。一個泛型參數,也被稱為一個類型變量,是用于指定一個泛型類型名稱的標識符。
     *      3.類型參數能被用來聲明返回值類型,并且能作為泛型方法得到的實際參數類型的占位符。
     *      4.泛型方法體的聲明和其他方法一樣。注意類型參數只能代表引用型類型,不能是原始類型
     */
    // 泛型方法
    public static <T extends Object> void getClass(T t) {
        System.out.println(t);
        System.out.println(t.getClass());
    }
}
// 輸出結果
class java.lang.String
class java.lang.String
class java.lang.Class

泛型的上下限

為了解決泛型中隱含的轉換問題,Java泛型加入了類型參數的上下邊界機制。

<? extends A>表示該類型參數可以是A(上邊界)或者A的子類類型。編譯時擦除到類型A,即用A類型代替類型參數。

<? super A>表示該類型參數可以是A(下邊界)或者A的父類類型。

public class TClass {
    public static void main(String[] args) {
//        TClass00<String, Object> tClass = new TClass00<>();
//        tClass.setKey("hello");
//        tClass.setValue("world");
//        System.out.println(tClass.getKey() + " " + tClass.getValue());
//        tClass.setValue(0.0);
//        System.out.println(tClass.getKey() + " " + tClass.getValue());
        // 上限
        TClass00<String, Double> hello = new TClass00<>();
        hello.setKey("hello");
        hello.setValue(0.0);
        hello(hello);
        // 下限
        TClass00<String, Object> world = new TClass00<>();
        world.setKey("hello");
        world.setValue("world");
        world(world);
    }
    // 上限
    public static void hello(TClass00<? extends String, ? extends Number> tClass00) {
        System.out.println(tClass00.getKey() + " " + tClass00.getValue());
    }
    // 下限
    public static void world(TClass00<? super String, ? super Integer> tClass00) {
        System.out.println(tClass00.getKey() + " " + tClass00.getValue());
    }
}
// 泛型類
class TClass00<K, V> {
    private K key;
    private V value;
    public K getKey() {
        System.out.println(key.getClass());
        return key;
    }
    public void setKey(K key) {
        this.key = key;
    }
    public V getValue() {
        System.out.println(value.getClass());
        return value;
    }
    public void setValue(V value) {
        this.value = value;
    }
}
// 輸出結果
class java.lang.String
class java.lang.Double
hello 0.0
class java.lang.String
class java.lang.String
hello world

以上就是關于“Java方法:泛型的簡介”,如果大家對此比較感興趣,想了解更多相關知識,不妨來關注一下本站的Java泛型詳解,里面還有更詳細的介紹,相信對大家的學習一定會有所幫助的。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 黄色免费网站在线播放 | 天堂成人在线观看 | 亚洲视频国产 | 免费看黄的动漫永久免费 | 漂流教室在线观看 | 在线观看91精品国产入口 | 黄色成人免费观看 | 视频在线观看免费网站 | 一个人看免费视频www在线观看 | 欧美成人亚洲国产精品 | 91草草| 欧美亚洲国产一区二区三区 | 国产成人久久一区二区三区 | 欧美在线网 | 中文字幕日本不卡一二三区 | 日日噜噜夜夜狠狠久久aⅴ 日日噜噜夜夜狠狠久久丁香七 | 五月天精品视频播放在线观看 | 亚洲天堂色视频 | 午夜小影院| 色天使色婷婷丁香久久综合 | 日批视频在线观看 | 色视频网站人成免费 | 一个人看的在线www高清视频 | 成年人在线免费观看视频网站 | 欧美在线日韩 | 真人一级一级特黄高清毛片 | 中文精品久久久久中文 | 天天夜夜狠狠 | 日韩第四页 | 久久九九有精品国产56 | 精品小视频 | 精品一区二区三区视频 | 国产精品成人久久久 | 最近中文字幕在线6 | 成人黄色激情视频 | 快点给我黄色录像看 | 日韩欧美一区二区不卡 | 天天操天天噜 | 亚洲性生活视频 | 亚洲图片 中文字幕 | 中文亚洲动漫精品 |