天天看點

56 java集合和泛型_6 _泛型概述

56 java集合和泛型_6 _泛型概述

文章目錄

  • ​​56 java集合和泛型_6 _泛型概述​​
  • ​​泛型​​
  • ​​泛型類​​
  • ​​泛型接口​​
  • ​​泛型方法​​

泛型

  1. Java泛型是JDK1.5中引入的一個新特性,其本質是參數化類型,把類型作為參數傳遞。
  2. 常見形式有泛型類、泛型接口、泛型方法。
  3. 文法:
  • T<…> T稱為類型占位符,表示一種引用類型。
  1. 好處:
  • 提高代碼的重用性
  • 防止類型轉換異常,提高代碼的安全性

泛型類

  1. 文法:類名, T稱為類型占位符,表示一種引用類型,如果編寫多個,要用逗号隔開
  2. 注意點:
  • 泛型隻能使用引用類型
  • 不同泛型對象之間不能互相指派

代碼:

package com.wlw.collection.generic;

/**
 * 泛型類
 * 文法:類名<T>, T稱為類型占位符,表示一種引用類型,如果編寫多個,要用逗号隔開
 */
public class MyGeneric<T> {

    //1.建立變量,(可以建立變量,但不能執行個體化,就是不能new)
    T t;

    //2.T 可以作為方法參數
    public void show(T t){
        System.out.println(t);
    }

    //3.T 作為傳回值
    public T getT(){

        return t;
    }
}      
package com.wlw.collection.generic;
/*
    1.泛型隻能使用引用類型
    2.不同泛型類型對象之間不能互相指派
 */
public class TestGeneric {
    public static void main(String[] args) {
        MyGeneric<String> myDeneric1 = new MyGeneric<String>();
        myDeneric1.t = "hello";
        myDeneric1.show("hello everyone!");
        System.out.println(myDeneric1.getT());

        System.out.println("------------------------------");

        MyGeneric<Integer> myGeneric2 = new MyGeneric<Integer>();
        myGeneric2.t = 200;
        myGeneric2.show(300);
        System.out.println(myGeneric2.getT());
        
        //MyGeneric<String> myGeneric3 = myGeneric2; //不同泛型類型對象之間不能互相指派
    }
}

/*
hello everyone!
hello
------------------------------
300
200
*/      

泛型接口

  1. 文法:接口名
  2. 注意點:不能使用泛型建立靜态常量
  3. 泛型接口的實作方式有兩種:
  • 定義一個實作類,直接寫出泛型
  • 定義一個泛型類,來實作這個泛型接口
package com.wlw.collection.generic;

/**
 * 泛型接口
 * 文法:接口名<T>
 * 注意點:不能使用泛型建立靜态常量
 */
public interface MyInterface<T> {
    String name = "張三";

    public T service(T t);
}      
package com.wlw.collection.generic;

public class MyInterfaceImpl implements MyInterface<String>{
    @Override
    public String service(String s) {
        return s;
    }
}      
package com.wlw.collection.generic;

public class MyInterfaceImpl2<T> implements MyInterface<T>  {
    @Override
    public T service(T t) {
        return t;
    }
}      
package com.wlw.collection.generic;

public class TestGeneric {
    public static void main(String[] args) {

        MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl();
        System.out.println(myInterfaceImpl.service("大家好!"));

        MyInterfaceImpl2<Integer> myInterfaceImpl2 = new MyInterfaceImpl2<Integer>();
        System.out.println(myInterfaceImpl2.service(200));

    }
}
/*
大家好!
200
*/      

泛型方法

  1. 文法: 傳回值類型
package com.wlw.collection.generic;

/**
 * 泛型方法
 * 文法:<T> 傳回值類型
 */
public class MyGenericMethod {

    public <T> T show(T t){
        System.out.println("泛型方法:"+t);
        return t;
    }
}      
package com.wlw.collection.generic;
/*
    1.泛型隻能使用引用類型
    2.不同泛型類型對象之間不能互相指派
 */
public class TestGeneric {
    public static void main(String[] args) {

        //泛型方法
        MyGenericMethod myGenericMethod = new MyGenericMethod();
        String s = myGenericMethod.show("中國加油!");
        Integer integer = myGenericMethod.show(200);
        Double d = myGenericMethod.show(3.14);

    }
}

/*
泛型方法:中國加油!
泛型方法:200
泛型方法:3.14

*/