美文网首页
Java中通配符的范围上限与范围下限

Java中通配符的范围上限与范围下限

作者: ip小怪兽 | 来源:发表于2019-11-30 10:55 被阅读0次

    泛型中通配符

    我们在定义泛型类,泛型方法,泛型接口的时候经常会碰见很多不同的通配符,比如 T,E,K,V 等等,这些通配符又都是什么意思呢?

    常用的 T,E,K,V,?

    本质上这些个都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。通常情况下,T,E,K,V,? 是这样约定的:

    • ? 表示不确定的 java 类型
    • T (type) 表示具体的一个java类型
    • K V (key value) 分别代表java键值中的Key Value
    • E (element) 代表Element

    ? 无界通配符

    比如我有一个父类 Animal 和几个子类,如Dog、Cat等,现在我需要一个动物的列表,我的第一个想法是像这样的:

    List<Animal> listAnimals
    

    但是老板的想法确实这样的:

    List<? extends Animal> listAnimals
    

    为什么要使用通配符而不是简单的泛型呢?通配符其实在声明局部变量时是没有什么意义的,但是当你为一个方法声明一个参数时,它是非常重要的。

    所以,对于不确定或者不关心实际要操作的类型,可以使用无限制通配符(尖括号里一个问号,即 <?> ),表示可以持有任何类型。

    上限通配符 < ? extends T>

    上限:用 extends 关键字声明,表示?表示的类型可能是T型或者是T的子类,这样有两个好处:

    如果传入的类型不是 T或者 T 的子类,编译不成功
    泛型中可以使用 T 的方法,要不然还得强转成 T 才能使用

    下限通配符 < ? supper T>

    上限:用 supper关键字声明,表示?表示的类型可能是T型或者是T的父类。

    相关文章

      网友评论

          本文标题:Java中通配符的范围上限与范围下限

          本文链接:https://www.haomeiwen.com/subject/utwgyctx.html