← 返回首页
JavaSE系列教程(七十六)
发表时间:2020-02-23 00:48:39
讲解泛型类和泛型方法。

泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

例如:

class MyClass<T>{}

一些常用的泛型类型变量: E:元素(Element),多用于java集合框架 K:关键字(Key) N:数字(Number) T:类型(Type) V:值(Value)

1.什么是泛型类

泛型类的主要作用在于类被实例化后,传入具体的类型参数,对类的成员属性的类型和成员方法的参数类型和返回值类型进行替换。

泛型类定义的语法如下:

[访问修饰符] class 类名称 <T>

实例:

public class Base<T> {
    private T obj;

    public Base() {
    }

    public Base(T obj) {
        this.obj = obj;
    }

    public T getObj() {
        return obj;
    }

    public void setObj(T obj) {
        this.obj = obj;
    }

    public void print() {
        System.out.println("obj type is: " + obj.getClass().getName()+",value is:"+obj);
    }

    public static void main(String[] args) {
        Base<String> base1=new Base<String>("This a string value!");
        Base<Integer> base2 = new Base<Integer>(100);

        base1.print();
        base2.print();
    }
}

运行结果:
obj type is: java.lang.String,value is:This a string value!
obj type is: java.lang.Integer,value is:100

T可以用任何一种引用类型,但是不允许使用基本类型,如int、double、char、boolean等是不允许的。泛型类定义时,可以使用T来定义其成员变量和成员方法的返回值和参数。

2.什么是泛型方法

我们可以在方法声明中定义类型参数,它们在方法的返回类型之前的尖括号中指定。包含泛型方法声明的类型不必是泛型类型。我们可以在非静态方法声明中使用为泛型类型指定的类型参数。

实例:

public class Base {

    public <T> void print(T[] arr) {
        for(T obj: arr){
            System.out.println(obj);
        }
    }

    public static void main(String[] args) {

        Integer[] arr1 = {1,2,3,4,5};
        String[] arr2 = {"banana","orange","apple","watermelon"};

        new Base().print(arr1);
        new Base().print(arr2);
    }
}

运行结果:
1
2
3
4
5
banana
orange
apple
watermelon