【学习心得】泛型小结

 

---------------------- android培训java培训、期待与您交流! ----------------------

我们知道程序就是算法和数据的结合,泛型就是将算法从操作的数据类型中分离出来,在逻辑上把相同的算法统一,不再和数据类型绑定,这是我的理解。按照书本上专业术语“泛型”来看,“泛型”指的是“参数化的类型”,它的重要的特性是它能让你创建类,接口和方法,由他们操作的数据类型被指定为一个参数。还要注意的一点是:Java编译器并不创建不同版本(类型参数)的泛型类,实际上编译器在同一个泛型类(不同的类型参数)进行编译时把所有的类型信息都删除了,这就是泛型的“去类型化”。知道这点很重要,因为在反射中会有涉及到getParameterTypes() 方法的理解。
   为了了解泛型带来的一些好处,我们来看这样一部分代码NonGen(Object o){
                                                    Object ob=o;
                                                   Object getOb(){
                                                    return ob;}
参数是Object类型的,所以不用说,所有类类型都能传递给它。然后我们再调用这个方法iob = NonGen(“I love 黑马”)
                                                                          int V= (Integer)iob.getOb();代码在编译时没有错误,但是在运行时会报错,这时候的错误往往是糟糕的。分析原因:由于NonGen()的参数是Object类型,所以任何对象都可以传递给它,但是我们传递的是一个String对象,调用getOb()后,我们获得String对象,然后我们将它强制转换成Integer对象,这是不同的对象,在运行时显然会出项异常。泛型就很好的解决了这个问题。
   需要我们掌握的是泛型参数的有界限制和使用通配符变元。
我们在传递参数类型时可能需要对参数类型进行限制,这时我们就使用参数类型的有界限制,一般使用格式为class Gen<T extends superclass & interfaceclass>{//....},T表示只能是同时满足superclass本身或者其的子类和实现了interfaceclass的接口类,如果界限只包含一个父类或者接口则不需要用“&”。通配符变元?是有别于<T>的,我们查询java的帮助文档会发现,有的<>是“T”,有的是“?”,如果我们在调用某个泛型对象的方法时,如果泛型的类型变元和方法的参数都是同一种泛型类型(类型参数决定),那么类型变元可以是T,也可以是?,但是我们的需求是调用对象和方法不相同的泛型参数,则用?。上次看到有同学说<T>,<?>和<Object o>的区别,我的理解是<T>和<?>的区别如前面所说,<?>和<Object o>是一样的,不知道有没有错误,希望高手看到后能指点一下。此外,通配符在涉及到界限问题是和<T>的用法基本一致,只是通配符界限有上下界,分别是extends和super,看懂了前面的<T>界限,这里应该很好懂了,这里就不多说了,小结完毕。


  

 

 


---------------------- android培训java培训、期待与您交流! ---------------------- 详细请查看: http://edu.csdn.net/heima
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值