zoukankan      html  css  js  c++  java
  • 泛型

    jdk1.5支持泛型很大程度上是为了让集合能够记住其元素的类型

    在没有泛型之前,一旦把一个对象放入集合中,集合便会忘记对象的类型,把所有的对象当成Object类型处理(为了能保存所有类型,保证通用性),当从集合中取出时,就需要进行强制类型转换,这样不仅代码臃肿,而且容易引起ClassCastException

    增加了泛型支持的集合,代码更加简洁健壮,可以保证如果编译时没有发出警告,运行时就不会产生ClassCastException,此外,泛型还增强了枚举类,反射等方面的功能

    java7前:List<String> l = new List<String>();

    java7后:菱形语法:List<String> l = new List<>();

    所谓泛型,就是允许在定义类,接口,方法时使用类型形参,这个类型形参将在声明变量,创建对象,调用方法时动态的指定(即传入实际参数)。

    定义泛型接口:

      public interface A<E, B>{void add(E x);void get(B a);}    Set<K>是特殊的数据类型,可以认为是Set的子类

    定义泛型类:

      public class B<T>{public T a;public static void main(String[] args){B<String> q = new B<>(); B<Double> w = new B<>();}}

    派生时:

      实现泛型接口或者继承泛型父类时,接口和父类不能包含类型形参:public class S extends B<t>{}   这是错误的

      传入实际类型是正确的:public class S extends B<Steing>{}

    实际不存在泛型类,不管泛型的实际类型参数是什么,运行时还是同一个类,内存中只占一块内存空间,所以静态方法,静态初始化块或者静态变量的声明和初始化中不允许使用类型形参

      public class A<T>{static T a;}  这是错误的

    系统不会真正生成泛型类,所以instanceof运算符后不能使用泛型

      a instanceof Object<String>  这是错误的

    类型通配符:

      ?  List<?> l = new ArrayList<String>();  List<?>仅表示是各种List泛型的父类,但不能把元素加入到其中,c.add(new Object())会报错,因为不知道具体是什么类型

      ? extends XX  受限制的通配符,只要是XX的子类就可以,但也不能把XX或者XX的子类对象放入,因为也不知道具体类型

    类型形参的上限:<T extends String & 接口...>

    下限:<? super T>

  • 相关阅读:
    第 4 章 容器
    第 4 章 容器
    第 4 章 容器
    第 4 章 容器
    第 3 章 镜像
    第 3 章 镜像
    seekbar拖动条控件
    OnClick,onLongClick,OnTouch调用机制
    在TextView文本中实现activity跳转
    TextView显示html图片方法
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7061721.html
Copyright © 2011-2022 走看看