java---泛型

101 阅读1分钟

1. 泛型类、泛型接口

1.1 一个最普通的泛型类
//此泛型类三处泛型是同一个,由外部调用时指定,若不指定,则默认Object
class Person<T>{
    String name;
    T info;
    public T getInfo() {
        return info;
    }
    public void setInfo(T info) {
        this.info = info;
    }
}
@Test
public void test1(){
   //没有指定泛型的类型
    Person person1 = new Person();
    person1.setInfo(22);
    person1.setInfo("33");

    //指定泛型的类型为String类型
    Person<String> person2 = new Person();
    //person2.setInfo(22); 编译不通过
    person2.setInfo("33");
}
1.2 泛型类的继承
class Person<T>{
    String name;
    T info;
    public T getInfo() {
        return info;
    }
    public void setInfo(T info) {
        this.info = info;
    }
}
//继承时候没有指定
class Stu <T,E> extends Person<T>{
    Integer age;
    E stuInfo;
    public E getStuInfo() {
        return stuInfo;
    }
    public void setStuInfo(E stuInfo) {
        this.stuInfo = stuInfo;
    }
}
public void test2(){
    Stu<String,Integer> stu = new Stu();
    stu.setInfo("555");
    stu.setStuInfo(555);
}
//继承时有指定
class Worker<E> extends Person<String> {
    Integer age;
    E workInfo;

    public E getWorkInfo() {
        return workInfo;
    }

    public void setWorkInfo(E workInfo) {
        this.workInfo = workInfo;
    }
}
@Test
public void test3() {
    Worker<String> worker = new Worker<>();
    worker.setWorkInfo("333");
    worker.setInfo("444");
}

2. 泛型方法

class GenerateTest<T> {
    //该方法不是泛型方法
    public void show_1(T t) {
        System.out.println(t.toString());
    }
    //在泛型类中声明了一个泛型方法,使用泛型E,并且返回值也是E类型
    public <E> E show_2(E t) {
        return t;
    }
    //在泛型类中声明了一个泛型方法,使用泛型T,注意这个T是一种全新的类型,可以与泛型类中声明的T不是同一种类型。
    public <T> void show_3(T t) {
        System.out.println(t.toString());
    }
}