自定义泛型:

泛型只会在编译器存在,在运行期,会被擦除

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
public class Demo {
    public static void main(String[] args){
        Node<String> str = new Node<String>("ddd");
        Node<Integer> num = new Node<>(10);
        System.out.println(str);
        System.out.println(num);

    }
}
class Node<T>{
    private T Date;
    private Node(){};
    public Node(T Data){
        this.Date = Data;
    }
    public T getDate() {
        return Date;
    }
    public void setDate(T date) {
        Date = date;
    }

    @Override
    public String toString() {
        return "Node{" +
                "Date=" + Date +
                '}';
    }
}

 

基本使用

import java.util.*;

public class Demo {
    public static void main(String[] args){
        Node<Number> num1 = new Node<Number>(20);
        Node<Integer> num2 = new Node<>(10);
        //Node.getData(num1);  //不支持,不能进行转换
        Node.getData(num2);

        Node.getData2(num1);  //使用了通配符,既可

        //此时泛型可以是Number包扩他的所有的子类
        Node<Short> num3 = new Node<Short>((short) 11);
        Node.getData3(num1);
        Node.getData3(num3);

        //此时泛型可以是Byts包扩他的所有的父类
        Node<Short> num4 = new Node<Short>((short) 11);
        Node.getData3(num1);
        Node.getData3(num4);

        //泛型方法定义
        String arr[] = {"1","2","3"};
        //好像不能传入一个集合
        System.out.println(Arrays.toString(Node.fun(arr,1,2)));

        //泛型嵌套
        Map<Integer,String> map = new HashMap<>();
        map.put(1,"k");
        map.put(2,"v");
        map.put(3,"c");
        Set<Map.Entry<Integer, String>> entries = map.entrySet();
        for (Map.Entry entry:entries){
            System.out.println(entry);
        }
    }
}
class Node<T>{
    private T Date;
    private Node(){};
    public Node(T Data){
        this.Date = Data;
    }
    public T getDate() {
        return Date;
    }
    public void setDate(T date) {
        Date = date;
    }

    @Override
    public String toString() {
        return "Node{" +
                "Date=" + Date +
                '}';
    }
    public static void getData(Node<Integer> node){
        System.out.println(node.getDate());
    }
    //使用通配符定义泛型类型,只能输出,不能修改
    public static void getData2(Node<?> node){
        //node.setDate(20); //报错
        System.out.println(node.getDate());
    }
    //设置上限,同样不能设置
    public static void getData3(Node<? extends Number> node){
        //node.setDate(20); //报错
        System.out.println(node.getDate());
    }
    //设置下限,包扩Byte,以及所有的父类
    public static void getData4(Node<? super Byte> node){
        //node.setDate(20); //报错
        System.out.println(node.getDate());
    }
    public static <T> T[] fun(T[] array,int i1,int i2){
        T temp = array[i1];
        array[i1] = array[i2];
        array[i2] = temp;
        return array;
    }
}

  

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄