• Java中泛型 问号的作用


    这是jdk1.5泛型的典型应用:
    第一种写法,叫做使用泛型方法:

       public <T extends Object> void thisIsT(List <T> list){

            //...

       }

    当然还可以这样写:

        public <T> void thisIsT(List <T> list){

            //...

        }

    这两种写法效果是一样的.
    第二种写法,叫做有限制的通配符:

        public void thisIsP(List <? extends Object> list){

            //...

        }

    其实还有这种写法就是把这两种方法结合起来:
    看下面的这个示例:(Collections.copy())

       class Collections {

           public static <T>  void copy(List<T> dest, List<? extends T> src){...}

       }

    仔细观察上面的这个方法,既使用了有限制的通配符(?),
    又使用了泛型方法.
    这两种泛型使用方法的主要区别就是:
    泛型函数(这里指copy()这个方法)允许类型参数(Type Parameters)被用来表示方法的一个或多个参数之间的关系,或者
    参数与其返回值之间的关系.如果没有这样的依赖关系,不应该使用泛型方法.

    在这里和大家共同学习了,更多请参考:

    说白了就是写成T就是将类型固定,而?则不固定,比如下面这个例子
    public class CollectionGenFoo<T extends Collection> {
    ...
    }
    这么写就会报错
    CollectionGenFoo<Collection> listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());
    如果把 CollectionGenFoo<T extends Collection> 改成 CollectionGenFoo<? extends Collection>的话
    CollectionGenFoo<Collection> listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());
    则不会报错。

    T 是一种类型。
    ?是泛指(就是通配符)
    List<?>  和List<Object> 是不一样的。

  • 相关阅读:
    最小二乘拟合(scipy实现)
    接口实例
    类的继承:员工和老板
    设计模式(Design Patterns)
    创建类
    面向对象1
    java随机数:彩票抽奖 + 验证码
    判断字符串中字符出现的次数+去除空格
    输出二维数组所有元素的和
    输出 一维数组中最大的数+数组遍历
  • 原文地址:https://www.cnblogs.com/cRaZy-TyKeIo/p/3447614.html
Copyright © 2020-2023  润新知