Java基础——泛型(generic)

时间:2023-02-16 12:11:28

泛型(generic

泛型概念

泛型允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,这些可变的部分在使用前必须作出指明è泛型本质上就是把类型参数化。

 

定义的形式

List<T> list = new ArrayList<T>()

 

在使用的泛型之前必须对其明确化。//泛型只在编译时期才起作用,运行时传入的参数是确定的

泛型在编译期间对数据类型进行了约束。

泛型类

当类中的属性数据类型不太确定的时候,可以考虑类型参数化 => 泛型

package com.sxt04.fanclass;

 

/**

 * T ==> Type

 * E ==> Element

 */

public class Person<T> {

    private T t;

 

    public T getT() {

        return t;

    }

 

    publicvoid setT(T t) {

        this.t = t;

    }

 

    public Person(T t) {

        super();

        this.t = t;

    }

 

    public Person() {

        super();

    }

 

    @Override

    public String toString() {

        return"Person [t=" + t + "]";

    }

   

}

 public class Test {

    public static void main(String[] args){

            Person<String>  person = new Person<String>();

            person.setT("67");

            

              Person<Integer>  person2 = new Person<Integer>();

              person2.set();

               

     }

}

泛型方法

当方法的形式参数不太确定时,我们可以考虑形参参数化 => 泛型

 

形式

public <T> void show(T t) {

        System.out.println(t);

}

public class Test {

    public static void main(String[] args) {

        FanMethod01 fanMethod01 = new FanMethod01();

       

        // 泛型方法在调用时确定类型

        fanMethod01.show("java");

        fanMethod01.show(123);

        fanMethod01.show(new Object());


        //泛型方法在调用时确定类型,原因传入的参数类型是确定的

        //泛型优化了一部分重载

        

    }

}

 //当多个方法不确定时

public <A,B>void print(A a,B b) {

       

}

public <A> void foo(A a,A b) {

       

   }

//可变参数

public<A> void print(A...a) {

}

//static

public class FanMethod03<T> {

    public static <A> void show(A a) {

       

    }

泛型接口

class FanImpl2<T> implements FanInterface<T>{

   

}

泛型的上限

public static void print (List<?  extends Pet >list){

        for (Pet pet : list) {

            System.out.println(pet);

        }

}

解析:

List<? extends Pet> list 表示传入集合中的元素一定是Pet的子类。Pet决定了上限。


 

泛型的下限

List<?super T>  list 表示传入集合中的元素一定是T类型的父类,T决定了下限