Java编程思想学习笔记——泛型

1. 泛型的主要目的之一,就是用来指定容器持有什么类型的对象,而且由编译器来保证其类型的正确性。由此,与其用Object指定为任何类型,不如暂时不指定类型,而到定义时决定类型,因为前者不会有类型检查。

2. 擦除。List<String>型的对象与List<Integer>型的对象,在运行时,其类型都被擦除为List。因此,在泛型机制下,无法获得有关泛型参数的运行时信息,像List<Integer>成为List,普通类型T则成为Object类型。这相比c++的模板机制,有很大的不足之处,弥补方法之一是使用泛型边界如<T extends ClassType>。

3. Java泛型没有其它语言的泛型那么有用,原因之一就是使用了擦除。擦除的核心动机是使得泛型化与非泛型化的代码之间能互相调用,是为了兼容。Java的设计者认为这是唯一可靠行的解决方案。如果Jdk1.0就引入了泛型,则不会有这个问题。

4. 擦除丢失了在泛型代码中执行某些操作的能力。任何在运行时需要知道确切类型信息的操作都将无法完成。而编译器会负责泛型代码之外的类型检查(即边界处),以确保插入容器的对象是正确的类型。

5. 边界可以有多个,如<T extends A&B&C>其中只能有一个是类,其它为接口。且第一个为类,后面的为接口。

6. Java的数组不允许放入子类型的对象,而泛型可以。

7. 泛型的一些限制:(1)不能用基本类型作为泛型参数;(2)一个类不能实现一个泛型接口的两种变体,由于擦除泛型无法识别;(3)无法在泛型代码内重载相同个数泛型参数的函数,因为各参数在擦除后没有区别。

8. 因为可向JDK1.5以前的代码传递泛型容器,所以旧式代码仍可能破坏你的容器。JDK1.5的java.util.Collections中有一组有用的工具,它们是静态方法checkedCollection,checkedList,checkMap等等,可以解决此类问题。使旧式代码中插入对象到容器时,也接受类型检查。

9. 使用数组的优势在于效率,如果需要变长度,或者需要一些除存取之外的特别操作,显然应该用容器。

10. Java中返回一个数组比c++中方便,c++中只能返回一个指针。

11. System.arrayCopy比用for循环要快得多。

12. 返回零长度的数组,而不是null是个好习惯。客户省去对null的判断。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值