Eclipse 3.1中的Java泛型支持2
2008-05-06 13:38
387 查看
Eclipse 3.1中的Java泛型支持
2005-12-09 09:00 作者: Neal Ford 出处: IBM 责任编辑:方舟从特定类型向泛型转换
请考虑清单 1 中的简单类,它创建了一个 Employee 和 Manager 对象的列表(Manager 扩展自 Employee),将他们打印出来,给他们涨工资后再打印出来。
清单 1. HR 类
package com.nealford.devworks.generics.generics; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class HR { public HR() { List empList = new ArrayList(5); empList.add(new Employee("Homer", 200.0, 1995)); empList.add(new Employee("Lenny", 300.0, 2000)); empList.add(new Employee("Waylon", 700.0, 1965)); empList.add(new Manager("Monty", 2000.0, 1933, (Employee) empList.get(2))); printEmployees(empList); System.out.println("----- Give everyone a raise -----"); for (int i = 0; i < empList.size(); i++) ((Employee) empList.get(i)).applyRaise(5); printEmployees(empList); System.out.println("The maximum salary for any employee is "+ Employee.MAX_SALARY); System.out.println("Sort employees by salary"); Collections.sort(empList); printEmployees(empList); System.out.println("Sort employees by name"); Collections.sort(empList, new Employee.NameComparer()); printEmployees(empList); System.out.println("Sort employees by hire year"); Collections.sort(empList, Employee.getHireYearComparator()); printEmployees(empList); } public void printEmployees(List emps) { for (int i = 0; i < emps.size(); i++) System.out.println(emps.get(i)); } public static void main(String[] args) { new HR(); } } |
快速修复特性
每当 Eclipse 要给您的代码建议一种改进时,Eclipse 的快速修复特性就显示为编辑器窗口左侧边栏上的一个灯泡。在清单 1 中的代码中,您将会看到多个快速修复。
图 3. 快速修复灯泡指示您的代码待改进
快速修复使用灯泡和黄色波浪线指示待改进处。如果将鼠标移动至黄色波浪线上,可以看到出现在图 4 中的改进建议。
图 4. 快速修复指示什么应该被通用化
这里所列的快速修复建议只有一条建议。边上的灯泡提出建议,添加一个本地变量保存 List 的 add() 方法的返回值。然而,在这里该方法返回一个布尔类型值,并且被忽略了。
为了定位快速修复建议,移至重构菜单。Eclipse 中很多重构与 Java 5 中的泛型直接相关。“Infer Generic Type Arguments”重构将给列表增加泛型支持。 第一个对话框允许您选择选项。
图 5. Infer Generic Type Arguments choices 对话框
第一个选项与一个结论相关,这个结论是 clone() 方法将返回接收者类型而不是另外一个类型(相关类)。大部分功能良好的类都遵守这个规则,如果您知道您的类不遵守这个规则,则不要选中这个选项。当第二个 选项未选中时,将保留“raw”(非泛型)参数,而不是推断出正确的泛型参数类型。
Eclipse 中的大多数重构中,您都可以预览您的类将发生什么变化。点击这个对话框上的 Preview 按钮将出现图 6 所示的对话框。
图 6. Preview the generic refactoring
更新后的代码如下:
清单 2. 更新后的代码
List<Employee> empList = new ArrayList<Employee>(5); empList.add(new Employee("Homer", 200.0, 1995)); empList.add(new Employee("Lenny", 300.0, 2000)); empList.add(new Employee("Waylon", 700.0, 1965)); empList.add(new Manager("Monty", 2000.0, 1933, empList.get(2))); |
在介绍完快速修复之前,Eclipse 还在 Java 5 支持中增加了另外一个有趣的方面:您可以得到为方法添加注释的建议,比如 @Override。您还具有针对注释的内容帮助。
图 7. 针对注释的快速修复和内容帮助扩展
快速帮助特性
Eclipse V3.1 已经添加了快速帮助以促进 Java 5 中的泛型支持。请考虑这个普通的 for() 循环,参见清单 3 中的 printEmployees() 方法。
清单 3. for() 循环
public void printEmployees(List<Employee> emps) { for (int i = 0; i < emps.size(); i++) System.out.println(emps.get(i)); } |
清单 4. for...each 循环
public void printEmployees(List<Employee> emps) { for (Employee emp : emps) System.out.println(emp); } |
相关文章推荐
- 在Eclipse3.1中支持jdk1.5 特性。
- Eclipse 3.1中的Java泛型支持1
- Eclipse 3.1中的Java泛型支持
- Eclipse 3.1中的Java泛型支持3
- Spring3.1 对Bean Validation规范的新支持(方法级别验证)
- Keil MDK 支持 Eclipse 啦!!!
- eclipse 创建maven web错误Cannot change version of project facet Dynamic web module to 3.1解决方案
- Eclipse3.1 插件[转]
- 在linux下搭建eclipse3.1+j2me开发环境(图)
- 在Eclipse3.1中如何使用Lomboz3.1开发struts
- Step by Step 配置Eclipse 3.1 + JBoss 4.0.3SP1 + Lomboz 3.1RC2
- cocos2dx 3.1环境配置与生成APK,支持中文输出。疑难:
- Eclipse对于多个Java项目的支持并不友好!
- FC4下启动Eclipse 3.1死机的问题解决办法
- Eclipse 插件EclipseShell 初版发布 支持脚本语言
- re"Eclipse3.1+Myeclipse4.0+Tomcat5.0+jdk1.5->J2EE"
- Eclipse(3.1) Plugin Framework(基于OSGI的Plugin Architecture)
- [转载]在Eclipse3.1中如何使用Lomboz3.1开发struts
- 如何让 Eclipse Java EE 版安装 CDT 以同时支持 Java 和 C/C++ 开发
- Mac OS X 使用grdle3.1+jdk8 将spring4.3编译成可导入eclipse等开发工具