• 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
    如果希望,又能插入,又能取出,就不要用通配符?

  • 相关阅读:
    Java 编译器
    ElasticSearch 集群搭建
    致:奋斗路上的自己
    ElasticSearch 简单入门
    char* 和 char* const
    usb虚拟网卡与串口
    usb虚拟网卡与串口
    ethtool处理网卡不断重启
    客车网上订票系统项目--票务管理、前端个人信息修改
    mysql错误号码2003 can't connect to mysql server on 'localhost' (0)解决方案
  • 原文地址:https://www.cnblogs.com/Glov/p/14326165.html
Copyright © 2020-2023  润新知