动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

简述3种泛型通配符

06-02 14:42 603浏览
举报 T字号
  • 大字
  • 中字
  • 小字

当我们不知道或者不关心实际操作类型的时候我们可以使用无限通配符,当我们不指定或者不关心操作类型,但是又想进行一定范围限制的时候,我们可以通过添加上限或下限来起到限制作用。

1.<?>无限通配符

无限通配符表示的是未知类型,表示不关心或者不能确定实际操作的类型,一般配合容器类使用。

public void testV(List<?> list) {}

需要注意的是: 无限通配符只能读的能力,没有写的能力。

public void testV(List<?> list) {
      Object o = list.get(0);
    //编译器不允许该操作
   // list.add("jaljal");
}

上面的List<?>为无限通配符,他只能使用get()获取元素,但不能使用add()方法添加元素。(即使修改元素也不被允许)

2.<? extends T>

定义了上限,期只有读的能力。此方式表示参数化的类型可能是所指定的类型,或者是此类型的子类。

//t1要么是Test2,要么是Test2的子类
public void testC(Test1<? extends Test2> t1) {
    Test2 value = t1.getValue();
    System.out.println("testC中的:" + value.getT());
}

3.<? super T>

定义了下限,有读的能力以及部分写的能力,子类可以写入父类。此方式表示参数化的类型可能是指定的类型,或者是此类型的父类

//t1要么是Test5,要么是Test5的父类
public void testB(Test1<? super Test5> t1) {
    //子类代替父类
    Test2 value = (Test2) t1.getValue();
    System.out.println(value.getT());
}

通配符不能用作返回值

如果返回值依赖类型参数,不能使用通配符作为返回值。可以使用类型参数返回方式:

public <T> T testA(T t, Test1<T> test1) {
    System.out.println("这是传入的T:" + t);
    t = test1.t;
    System.out.println("这是赋值后的T:" + t);
    return t;
}
  • 要从泛型类取数据时,用extends;
  • 要往泛型类写数据时,用super;
  • 既要取又要写,就不用通配符(即extends与super都不用)。

泛型中只有通配符可以使用super关键字,类型参数不支持这种写法。

0人推荐
共同学习,写下你的评论
0条评论
代码小兵696
程序员代码小兵696

118篇文章贡献392976字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

提枪策马乘胜追击04-21 20:01

Spring常见面试题

代码小兵92504-17 16:07

Java零基础实战项目——五子棋

代码小兵98804-25 13:57

Java string类详解

杨晶珍05-11 14:54

6道经典算法面试题

杨晶珍05-12 16:39

发评论

举报

0/150

取消