美文网首页Java学习笔记
泛型的功能与使用

泛型的功能与使用

作者: 蜗先生 | 来源:发表于2017-08-07 11:03 被阅读18次
1.泛型的功能

我们知道数组是存储相同类型的变量,集合可以存储不同类型的变量,正是因为存储不同类型容易在运行时出现ClassCastException(类型转换异常),且在编译时无提醒,例如

List list = new ArrayList( );
String str = (String)list.get(0);//运行时ClassCastException

因此jdk5引入了泛型的概念,保证了类型的转换不正确在编译时不通过,使异常不会保留到运行时。泛型只是在编译时的检查使用,运行时会把泛型擦除。

List<Integer> list = new ArrayList<Integer>( );
String str = (String)list.get(0);//编译不通过,不能将Integer转换成String

当然泛型的使用不只是在集合中,自定义的类也可以使用泛型。

2.泛型的使用
1)泛型类
修饰符 Class/Interface 类名或接口名<泛型符号>{   }

类中的属性和方法都可以把泛型符号当做类使用。

2)泛型方法
修饰符 <泛型符号> 返回值 方法名(类型 形参){   }

方法中的返回值,形参类型可以使用泛型。

3.泛型中的通配符

面向对象的三大特性:封装、继承、多态,多态是向上转型实现的,向上转型又必须是继承关系,但是集合中的List<Number>不是List<Integer>的父类,那么就不能用下列代码

LIst<Integer> list = new ArrayList<Integer>( );
List<Number> list2 = list;//编译不通过

因此引入通配符,充当某一个或一些类的父类,保证了上面的转换可以实现。

1)? 任意类型

?可以充当任意类型的父类,不能是Object,如果下面这样写会编译不通过

List<Object> list = new ArrayList<Integer>( );
//编译不通过,不能将ArrayList<Integer>类型转换成 List<Object>

可以这样写

LIst<Integer> list = new ArrayList<Integer>( );
List<?> list2 = list;
2)? extends A A及其所有子类

? extends A可以充当A及其所有子类的父类,不能是A,同上编译不通过
可以这样写

LIst<Integer> list = new ArrayList<Integer>( );
List<? extends Number> list2 = list;
3)? super B B及其所有父类

? extends B 可以充当B及其所有父类的父类,不能是B,同上编译不通过
可以这样写

LIst<Integer> list = new ArrayList<Integer>( );
List<? super Integer> list2 = list;

相关文章

  • 泛型的功能与使用

    1.泛型的功能 我们知道数组是存储相同类型的变量,集合可以存储不同类型的变量,正是因为存储不同类型容易在运行时出现...

  • Java-API-集合框架(三)-泛型

    泛型的由来和基本使用 泛型的擦除 泛型类的使用 泛型方法的使用 泛型接口 泛型通配符(?) 通配符? 在api中的...

  • 夯实JAVA基础之 - 泛型

    泛型的定义及使用 1. 定义泛型: 2. 类中使用泛型 3. 使用泛型类 4. 使用泛型的优势? 多泛型变量的定义...

  • 九、泛型

    九、泛型 尽量不要写这种有能与泛型方法重载的代码,有迷惑性 限定传入 T 的类型 泛型数组 Java 不支持泛型类...

  • Java泛型

    本文介绍的知识点 泛型是什么? 泛型的使用在反射中使用泛型在集合类中使用泛型 关于泛型擦除如何理解?如何避免泛型擦...

  • java基础-day13-泛型

    泛型 1. 泛型 1.1 为什么要使用泛型 1.2 泛型的基本格式 1.3 泛型在方法中使用 1.3 泛型在类内的...

  • 四 集合 ——第二节 泛型

    文章目录 1、 泛型概念2、 使用泛型的好处3、 泛型的定义与使用 3、1 定义和使用含有泛型的类3、2 含有泛型...

  • Java 泛型

    一、泛型使用 1、泛型类 2、泛型函数 二、泛型限定符 1、泛型上限 泛型上限使用 extends 限制 多个限制...

  • Objective-C 泛型 协变 逆变

    为什么要使用泛型 如何使用泛型 限制泛型 协变 逆变 为什么要使用泛型 在使用NSArray, NSSet, NS...

  • 泛型基础二

    如果不明白为什么要使用泛型,使用泛型的好处,以及泛型类,泛型接口,泛型方法等知识,请移步泛型基础一 通配符 上界通...

网友评论

    本文标题:泛型的功能与使用

    本文链接:https://www.haomeiwen.com/subject/cqeolxtx.html