泛型(二)之通配符

来源:互联网 发布:人工智能危机作文 编辑:程序博客网 时间:2024/06/18 00:03

一、通配符:解决接收一个类的任意的泛型类型,但是不能修改,只能取出,就可以使用通配符?来描述
格式:类型名称

class Message<E> {    private E mes;    public void setMes(E mes) {        this.mes = mes;    }    public E getMes() {        return mes;    }}public class Main {    public static void main(String[] args) {        Message<String> m = new Message<>();        m.setMes("hello world");        fun(m);    }    public static void fun(Message<?> mes) {        //不能够设置(set),但是可以取出        System.out.println(mes.getMes());    }}

二、子通配符
在“?”通配符的基础上有两个子通配符
1)?extends 类:设置泛型上限,可以在声明上和方法的参数上使用
例子
- ?extends Number:意味着可以设置Number类或者Number的子类

class Message<E extends Number> {    private E mes;    public void setMes(E mes ) {        this.mes = mes;    }    public E getMes() {        return mes;    }}public class Main {    public static void main(String[] args) {        Message<Integer> m = new Message<>();        m.setMes(100);        fun(m);    }    public static void fun(Message<? extends Number> mes) {        //不能够设置(set),但是可以取出        System.out.println(mes.getMes());    }}

2)? super 类:设置泛型下限,方法参数上使用
例子:
-? super String:意味着只能设置String或者是它的父类(Object)

// 用<>super通配符,不能在class上(extends可以)class Message<E> {    private E mes;    public void setMes(E mes ) {        this.mes = mes;    }    public E getMes() {        return mes;    }}public class Main {    public static void main(String[] args) {        Message<Object> m = new Message<>();        m.setMes(12.5);        fun(m);    }    public static void fun(Message<? super String> mes) {        //意味着可以传入String类和他的父类Object类        System.out.println(mes.getMes());    }}
0 0
原创粉丝点击