黑马程序员技术交流社区
标题: 泛形有什么特点? [打印本页]
作者: 墓____夜 时间: 2014-5-29 14:51
标题: 泛形有什么特点?
什么是泛形,泛形有什么特点?
作者: 凝霜的枯藤 时间: 2014-5-29 14:57
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
泛型是提供给javac 编译器使用的,可以限定集合的输入类型,让编译器挡住源代码程序中的非法输入,编译器编译带类型说明的集合时会擦除"类型"信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样, 由于编译器生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合加入其它类型的数据,例如,用反射得到集合,在调用其add方法就可.
- package com.itcast.generic;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- public class GenericTest1 {
- public static void main(String[] args) {
- List list = new ArrayList();
- list.add(new Random());
- list.add("abc");
- //运行时会出错,但编码时发现不了---throw java.lang.ClassCastException
- Integer num = (Integer) list.get(0);
- }
- }
复制代码 而使用泛型之后:
-
085855_qt6o_1427560.jpg
(103.68 KB, 下载次数: 38)
作者: 墓____夜 时间: 2014-5-29 15:57
泛形又有什么作用呢?
作者: l939 时间: 2014-5-29 16:09
泛型的作用就是一个限定,用来限定传入的数据类型,如<String>就是说要传入的是String类型,反正呢,就是把一些运行时的语法异常转到了编译时异常,编译的时候就会出现提示,方便我们发现问题的所在
作者: 相濡、彼岸 时间: 2014-5-29 21:48
本帖最后由 相濡、彼岸 于 2014-5-29 22:37 编辑
基于视频上的总结:估计也就这些了吧,不是很系统,我也刚学完这部分不久!
(1) 泛型的出现是用于解决安全问题的,是一个安全机制。
简单的说就是将以前运行时期出现的问题 :ClassCastException (类型转换异常),转移到了编译时期,方便解决问题,提高安全性,避免强制转换麻烦。
(2)<> 中接收的是引用数据类型
(3)泛型既可以定义在类上,接口上,也可以定义在方法上,而且泛型类里面可以有泛型方法,静态方法不可以访问类上定义的泛型。
(4)泛型类:当类中要操作的引用数据类型不确定的时候,就定义泛型来完成扩展。
(5)泛型方法:当我们定义了一个功能,但是不知道这个功能操作什么类型的数据时,可以定义泛型。
也可以定义在静态方法上。
(6)<E>:这里的E是定义了一个具体的类型,比如上传个String,然后就只能操作String类型的数据!
<?>:是一个通配符,也可以叫占位符,可以传任意类型的。
<? extends E>:此时是可以接收E类型,或者是E的父类型,称为上限。
<? super E>:此时是可以接收E类型,或者是E的子类型,称为下限。
作者: KevinSmart 时间: 2014-5-30 13:58
使用泛型之前的代码就是错误的,new Random()生成的是一个对象,new Random().nextInt()才是数字。第二个也不对,new Random()不是String类型的。- public static void main(String[] args) {
- List<String> list = new ArrayList<String>();
- list.add(((Integer) new Random().nextInt()).toString());
- list.add("abc");
- System.out.println(list.get(0));
- }
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |