java 高级泛型_java高级特性——泛型

jdk1.5 增加的java中的新特性

自动装箱拆箱 Integer i = 10; i = 10 + i;

静态导入 import static

可变参数 …objs 必须是最后一个参数

枚举

内省

反射 剖析类,分析类的成员

1.集合泛型:

在没有泛型之前,集合中存入的数据,类型就会丢失掉,在取出数据时,需要做强制类型转换,就有转换失败的风险,而这种风险,在编译阶段是没有办法检查出来的

引入泛型后,在定义集合的过程中可以指定集合中存储的类型,当存入非这种类型的数据时,编译时会报错.取出数据时也不需要强转

List list = new ArrayList();

ArrayList中的E 称为 类型参数变量

ArrayList中的Integer 称为 实际类型参数

整个称为ArrayList 泛型类型

整个ArrayList称为参数化的类型(ParameterizedType )

如果两边都有泛型,则要求泛型必须一致,也可以只有一边有而另一边没有

ArrayList list = new ArrayList(); //错误

ArrayList list = new ArrayList(); //错误

ArrayList list = new ArrayList ();//--考虑兼容1.5之前的老程序

ArrayList list = new ArrayList();

2.自定义泛型

方法泛型:

定义在方法上的泛型就叫做方法泛型,作用的范围的当前方法内部

泛型在使用之前必须先定义,其中的字母可以是任意字母,但是通常使用大写字母

可以认为,当方法在被调用到时,虚拟机自动判断出泛型的具体类型.

public static void doxx(T t);

类上的泛型:

定义在类上的放行叫做类泛型,作用范围是整个类中都可以使用

public class GenericDao {}

—–可以认为,在使用这个类时,就需要指定出泛型的具体类型.如果不明确指定,则泛型是它的上边界类型的.

静态方法不能使用类上定义的泛型,如果想使用泛型,静态方法必须自己定义泛型

*泛型通配符:

——因为泛型没有继承关系,所有当需要用一个泛型引用引用不同的泛型实现时,泛型中写他们共同的父类是不行的,这时该怎么做呢?

引入一个新的概念,叫做泛型通配符?

注意: 泛型通配符只能用在泛型引用中,用来引用不同的泛型实现,不能出现在实现中.

List>list = null;

list = new ArrayList();

list = new ArrayList();

*泛型的边界:

——如果没有指定泛型默认可以接受任意的类型,有时希望进一步限制,此时可以使用泛型的边界:

extends

- 用来指定泛型的上边界,使用在泛型的通配符中和泛型定义中,指定具体的泛型实现必须是指定的类或其子类.

坏处是: 在传入对象时,只能传入null

好处是: 获取到泛型的对象时,可以调用上边界的方法.

super

- 用来指定泛型的下边界,使用在泛型的通配符中,指定具体的泛型实现必须是指定类或其超类.

好处是: 可以传入对象时,可以传入下边界的子孙类对象

坏处是: 获取到泛型对象时,只能调用Object身上的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值