zoukankan      html  css  js  c++  java
  • Java泛型

    Java泛型

    为什么要使用泛型?

    不使用泛型的情况下,所有对象都可以放进容器中,当需要取出对象的时候,你有可能忘记了所取出的这个对象的类型。这样,就有可能出现类型转换异常。

    怎么使用泛型

    泛型的用法是在容器后面添加<type>,此类型和此类型的子类都可以放进容器,与之无关的类型无法放进容器。写法如下

    ArrayList<Hero> heros = new ArrayList<Hero>();
    //泛型的简写方法
    ArrayList<Hero> heros2 = new ArrayList<>();
    

    设计泛型类

    设计这个类的时候,在类的声明上,加上一个<T>,表示该类支持泛型。
    T是type的缩写,也可以使用任何其他的合法的变量,比如A,B,X都可以,但是一般约定成俗使用T,代表类型。

    public class Container<T> {
    	...
    }
    

    通配符

    ?extends

    假设使用Container container<? extends Fruit>表示这是一个Fruit泛型或者其子类泛型,泛型可能是Apple,Orange…所以,从中取出来的对象,一定可以转型Apple 

    但是,不能向容器中放入对象,因为如果你放了Orange,那么不满足container<Apple>这个泛型

    ? super

    假设使用Container container<? super Fruit>表示这是一个Fruit泛型或者其父类泛型,泛型可能是Fruit或者Object。可以往容器中插入Fruit及Fruit的子类 ,但是取出来有风险,并不能确定是Fruit还是Object。

    泛型通配符?

    泛型通配符? 代表任意泛型
    既然?代表任意泛型,那么换句话说,这个容器什么泛型都有可能

    所以只能以Object的形式取出来
    并且不能往里面放对象,因为不知道到底是一个什么泛型的容器

    总结

    如果希望只取出,不插入,就使用? extends
    如果希望只插入,不取出,就使用? super
    如果希望,又能插入,又能取出,就不要用通配符?

  • 相关阅读:
    【网络】【交换机】相关字符串处理
    python【telnet】使用
    【?】使用汇总
    【dbm】【功率】换算
    快速【kill进程】
    常用功能【时间log】
    python切换镜像源
    git报remote HTTP Basic Access denied错误的解决方法
    求取1到n的素数的数学思想——埃拉托斯特尼筛法
    MySQL count(*) 和 count(字段) 区别
  • 原文地址:https://www.cnblogs.com/Glov/p/14326165.html
Copyright © 2011-2022 走看看