泛型学习

本文深入探讨了Java泛型的概念、引入背景及其与C++模板的相似之处。着重介绍了泛型的使用注意事项,包括类型约束、通配符作用以及如何在泛型接口中正确实现类。此外,文章还详细解释了JDK7后简化泛型实例化的过程,并通过实例演示了泛型在实际编程中的应用。

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

从JDK5之后才开始引入了泛型,java泛型与c++中的模板相似。

注意事项:

1)泛型只能用于对象

例如:

class Demo<T>{         }

Demo<Integer> iOb = newDemo<Integer>(10);////正确

Demo<int> iOb = newDemo<int>(10);//错误,因为int是基本类型;

在JDK7之后,简化了泛型的实例化过程;

例如:Demo<Integer> iOb = newDemo<>(10);////这样也是正确的;

2)约束类型

如果需要限制泛型所能支持的类型,使用约束类型。即让泛型继承一个父类;

例如:

class Demo<T extends Number>{         }   //这个泛型限制在Number类型下的类型范围;

3)通配符作用

要创建一个泛型的absEqual()方法,必须使用java的另一个泛型特性:通配符实参。由“?”指定,代表未知的类型。

例如:

class Demo<T extends Number>{ 

       T num;

       booleanabsEqual(num.(Demo<T> ob){

       if(Math.abs(num.doubleValue()) == Math.abs(ob.num.doubleValue()))

                    return true;

       return false;

       }

}/////////////////会出现编译错误

class Demo<T>{ 

       T num;

       booleanabsEqual(num.(Demo<?> ob){

       if(Math.abs(num.doubleValue()) == Math.abs(ob.num.doubleValue()))

                    return true;

       return false;

       }

}/////////////////编译正确

通配符也像约束类型一下,进行相应的类型限制;

例如:

booleanabsEqual(num.(Demo<?extends A> ob)   //其中A为某一类型;

4)任何实现泛型接口的类也必须是泛型的

5)擦除特性

当java代码编译时,所有的泛型类型信息都将被删除(擦除)。这意味着使用类型形参的约束类型来替换类型形参,如果没有显示的指定约束类型,则约束类型为Object,然后应用合适的强制类型转换(由类型实参确定)来与类型实参指定的类型保持兼容。编译器还强制这种类型兼容性。这种方法对于泛型意味着在运行时不存在类型形参,它们只是一种源代码机制。(参考:《新手学习java7编程》)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值