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

  • 相关阅读:
    HDU 2955 Robberies(01背包)
    HDU 2602 Bone Collector(01背包)
    HUST 1352 Repetitions of Substrings(字符串)
    HUST 1358 Uiwurerirexb jeqvad(模拟解密)
    HUST 1404 Hamming Distance(字符串)
    HDU 4520 小Q系列故事――最佳裁判(STL)
    HDU 2058 The sum problem(枚举)
    【破解】修改程序版权、添加弹窗
    HDU 1407 测试你是否和LTC水平一样高(枚举)
    HDU 1050 Moving Tables(贪心)
  • 原文地址:https://www.cnblogs.com/Glov/p/14326165.html
Copyright © 2011-2022 走看看