高效泛型

本章包含一些如何有效使用泛型的实践代码。着重介绍了检查集合,安全问题,专用的类以及二进制的适配性。

小心使用遗留代码

我们知道,泛型是在编译时检查的,而不是在运行时。通常,这正式我们想要的,因为编译时检查可以更早的报错误,而没有运行时开销。然而,有时候这并不合适,
或者是因为我们不确定编译时检查是否足够(也就是说,我们将传递一个参数化类型的实例给一个我们不信任的遗留的客户端),或者是因为我们需要运行时的类型信息。(也就是说,我们需要一个具体的类型作为数组的元素)。检查集合通常能起到作用,而当它们不能起作用的时候,我们可以创建一个特殊的类。
想象一个遗留类库,该类库包含想给定的列表添加元素,并返回包含这些元素的新列表。

class LegacyLibrary {
  public static void addItems(List list) {
    list.add(new Integer(1)); list.add("two");
  }
  public static List getItems() {
    List list = new ArrayList();
    list.add(new Integer(3)); list.add("four");
    return list;
  }
}

现在有一个客户端使用这些遗留代码,而且已经被错误的告知里面的元素都是整数。

class NaiveClient {
  public static void processItems() {
    List<Integer> list = new ArrayList<Integer>();
    Legacy Library.addItems(list);
    List<Integer> list2 = LegacyLibrary.getItems(); // unchecked
    // sometime later ...
    int s = 0;
    for (int i : list) s += i; // class cast exception
    for (int i : list2) s += i; // class cast exception
  }
}

待完成

转载于:https://my.oschina.net/xiaojintao/blog/817380

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值