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

  • 相关阅读:
    2.24 Java基础总结 ①内部类基础
    2.24 Java基础总结 ①访问权限②static③静态方法④实例初始化块⑤静态初始化块
    2.24 Java基础总结 ①for-each循环②继承概念③全类名④方法重写
    Shell 编程和Python编程的那些不同之处(一)
    python标准异常
    Python 常用模块总结
    Python正则表达式指南
    新员工入职自动加入所在部门的邮件组。
    c++四则运算代码
    马云语录
  • 原文地址:https://www.cnblogs.com/Glov/p/14326165.html
Copyright © 2011-2022 走看看