java 泛型

一、简单小例子。

 尖括号中包含的是形式类型参数formal type parameters),它们就如同一般的类型一样,可以在整个类的声明中被使用。

 当类被使用时,会使用具体的实际类型参数actual type argument)代替。

  形式类型参数的命名:尽量使用单个的大写字母(有时候多个泛型类型时会加上数字,比如T1,T2),比如许多容器集合使用E,代表element(元素),Map中用K代表键keys,V代表值。

 值得注意:基本数据类型调用泛型函数,返回对应的包装类型。

public static void main(String[] args) {
        // 基本数据类型返回对应的包装类型
        Integer num = getGener(122);
        Character[] ch = new Character[] { 'w', 's', 'w' };
        getGener2(ch);
        System.out.println(num);
    }

    private static <T> T getGener(T o) {
        return o;
    }
    private static <T> T getGener2(T[] o) {
        T obj = o[2];
        return obj;
    }

 二、泛型类

import java.util.Arrays;

class Tool<T> {

    public  void reverse(T[] arr) {
        Arrays.sort(arr);
    }
}

public class Generics {

    public static void main(String[] args) {
        Tool<Integer>tool=new Tool<Integer>();
        Integer[]num={1,3,0,2};
        tool.reverse(num);
    }

}

三、泛型接口

interface Dao<T> {

}

class Demo <T> implements Dao<T> {

}

 四、限制泛型

package generics;

import java.util.ArrayList;
import java.util.Collection;

public class Generics {

    public static void main(String[] args) {
    ArrayList<Integer>arr=new ArrayList<Integer>();
    ArrayList<Object>objs=new ArrayList<Object>();
    lower(arr);
    lower(objs);
    }

    // 下限:Integer的父类
    public static void lower(Collection<? super Integer> o) {

    }

    // 上限:Number的子类
    public static void upper(Collection<? extends Number> o) {

    }
}
原文地址:https://www.cnblogs.com/wswbk/p/6729803.html