jdk1.5新特性之泛型总结1

本文深入讲解Java泛型的概念,包括泛型类型、类型变量、参数化类型等专业术语,并介绍了泛型在数组创建、通配符使用及方法定义中的应用。此外,还探讨了原始类型与参数化类型的兼容性等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在1.5之前,没有泛型,在往集合中存入数据时无法限制存入的数据类型.

Jdk 1.5的集合类希望你在定义集合时,明确表示你要向集合中装哪种类型的数据,无法加入指定类型以外的数据
ArrayList<Integer> collection = new ArrayList<Integer>();
尖括号中的就是泛型,这个集合只能存入Integer类型的数据.存入其他类型数据编译器会报错.

1.ArrayList<Integer>中涉及的专业术语
整个ArrayList<E>称为泛型类型
ArrayList<E>中的E称为类型变量或类型参数
整个ArrayList<Integer>称为参数化的类型
ArrayList<Integer>中的Integer称为类型参数的实例或实际类型参数
ArrayList<Integer>中的<>念着typeof
ArrayList称为原始类型

2.关于原始类型和参数化类型的兼容
ArrayList<Integer> collection=new ArrayList();
ArrayList collection=new ArrayList<Integer>();
以上两种都可以通过编译,但是会报安全警告.

ArrayList<Object> collection3=new ArrayList<String>();
这种写法无法通过编译.

:原始类型可以引用参数化类型的对象,参数化类型也可以引用原始类型的对象.
参数化类型不考虑类型参数的继承关系.
思考:
Vector v1 = new Vector<String>();
Vector<Object> v = v1;
上面的代码不会报错,编译器一行一行的检查语法,编译期没错.

3.编译器不允许创建泛型变量的数组.也就是创建数组实例时,数组元素不能是参数化的类型.(不知道为什么,但是确实创建不了)

4.?在泛型中时通配符便是任意类型.
限定通配符的上边界:
正确:Vector<? extends Number> x = new Vector<Integer>();  //Integer是Number的子类
错误:Vector<? extends Number> x = new Vector<String>();

限定通配符的下边界:
正确:Vector<? super Integer> x = new Vector<Number>();//Number是Integer的父类
错误:Vector<? super Integer> x = new Vector<Byte>();

注意:
限定通配符总是包括自己。
?只能用作引用,不能用它去给其他变量赋值
Vector<? extends Number> y = new Vector<Integer>();

Vector<Number> x = y;//这行代码是错误的. 因为不可以把?赋给Number.

5.泛型中还可以有泛型.例如在使用map集合时, Set<Map.Entry<Integer,String>> entrySet=map.entrySet();

6.泛型中只能定义引用数据类型,不可以定义基本数据类型.也就是必须是Object的子类......(说白了泛型省去了使用Object时类型的强转).

7.泛型也可以定义在方法中.需要在返回值类型前声明.

8.也可以用类型变量表示异常,称为参数化的异常,可以用于方法的throws列表中,但是不能用于catch子句中。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值