Eclipse 3.1中的Java泛型支持3

本文介绍Eclipse 3.1版本中引入的Java泛型支持功能,包括泛型类型的安全重命名、泛型方法的抽象及代码帮助等。同时展示了Eclipse搜索工具如何智能地处理泛型类型,并提供了示例代码说明如何灵活运用泛型参数。

Eclipse 3.1中的Java泛型支持

2005-12-09 09:00 作者: Neal Ford 出处: IBM 责任编辑:方舟
泛型类型

  Eclipse V3.1 为了扩展到泛型类型而扩大了对类型操作的支持。这意味着:
  • 泛型类型能够被安全地重命名。
  • 类型变量能够被安全地重命名。
  • 泛型方法能够从泛型代码中抽象出来或者嵌入泛型代码。
  • 代码帮助可以自动将合适的类型参数插入参数化的类型中。
Eclipse 中的搜索工具对于泛型类型已经具有了更高的智能性。请考虑如下代码:

  清单 5. 泛型类型

  
public void doEmployeeAnalysis() {
List<Employee> empList = new ArrayList<Employee>(5);
List<Date> hireDates = new ArrayList<Date>(5);
List<Integer> departments = new ArrayList<Integer>(10);
List<? extends Employee> allMgrs = new ArrayList<Manager>(5);
. . .

  如果您选中第一个 List<Employee> 声明并且选择 Search > References > Project,Eclipse 将显示给您所有的 list 声明。

图 8. Eclipse 在寻找泛型引用方面已经变得聪明

Eclipse 在寻找泛型引用方面已经变得聪明



  您也可以通过 Search 窗口隐藏良好的特性来过滤这些结果。如果您访问 Search 窗口菜单(在右上角,最小化和最大化按钮的旁边),您可以找到泛型感知的过滤选项。

图 9. 搜索窗口的过滤菜单允许您过滤泛型感知的结果

搜索窗口的过滤菜单允许您过滤泛型感知的结果



  如果您使用 Filter Incompatible 过滤结果,将删除两个不是基于 Employee 的条目。结果如图 10 所示。

图 10. Filter Incompatible 在搜索窗口过滤掉与非 Employee 相关的条目

 Filter Incompatible 在搜索窗口过滤掉与非 Employee 相关的条目



   深入了解泛型

   不幸的是,Eclipse 不能解决您所有的泛型问题。事实上,有时重构会为您要解决的问题产生语法正确但是语义不正确的代码。具有讽刺意味的是,在泛型出现之前的那些日子更轻松, 因为您必须将所有东西都作为对象的泛型集合传递。而现在您必须小心地传递正确类型的集合。

  考虑这个例子。在 HR 应用程序中,您添加一个方法确定雇员的退休年龄。然而,Employee 的年龄是来自于 Employee 的父类:Person。写一个方法只接受在这个实例中工作的雇员,但是您不想将您的应用程序只用于雇员。如果将来您需要查询以前的雇员(作为 Persons),该怎么办呢?

  这个问题的解决方案在于灵活的泛型参数。请考虑清单 6 中的代码,它接受任何扩展自 Person 的类。

  清单 6. 示例 SELECT 语句
  
public List<Person> empsOverRetirementAge(
List<? extends Person> people) {
List<Person> retirees = new ArrayList<Person>(1);
for (Person e : people)
if (e.getAge() > 65)
retirees.add(e);
return retirees;
}

  该方法接受 Person 的任何子类,所以更灵活。使用泛型的时候,您应该牢记这一点。在本例中,泛型实际上比较特定(至少,他们应该称这种语言特性为“特定性”)。仔细识别参数 类型能够使您的代码获得同样的灵活性,因此性能比泛型更好,但是具有泛型提供的附加的类型安全性。

   结束语

   泛型支持大大增强了 Java 编程语言,工具供应商必然需要很长时间才能赶上。现在有了好的工具支持,您应该开始利用这种高级语言特性。它使代码更加可读 —— 因为删除了类型强制转换 —— 并且允许编译器为您做更多的工作。任何时候您都可以让编译器和其他的工具(如 IDE)做更多的工作,这意味着您要做的工作更少。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值