eclipse什么意思 warnings 怎么解决

版权声明:本文为博主原创文章转载请注明出处。 /z/article/details/

几乎从第一个版本开始Java 技术的創立者们就已经开始讨论对该语言添加泛型支持。C++ 通过标准模板库对泛型进行支持但是由于缺少所有其他类(嵌入在 Java 语言中的 Object 类中)的┅个统一父类,泛型的实现也受到阻碍Java 编程语言的泛型支持是其历史上最重大的语法变化。由于某些显而易见的原因工具支持比其他 SDK 升级的步法要慢得多。尽管如此现在 eclipse什么意思 V3.1 已经对这些语言的新特性有了出色的支持。本文重点介绍其中的一些新特性

为了打开 eclipse什麼意思 V3.1 中的 Java 泛型支持,需要在机器上安装 Java 5从一些平常的地方都可以下载到 Java 5。泛型支持连同项目属性一起出现在编译器设置页面这意味著像以前一样,每个项目具有独立的 SDK 设置为了创建使用泛型的项目,必须在创建项目时指定语言级别或者通过现有项目的项目属性指定語言级别

Java 5 设置使用两个特定的属性页。第一个属性页指定编译器设置

图 1. 针对 Java 5 支持的特定于编译器的设置

除非您已经在 eclipse什么意思 for Java 5 中设置叻默认项目设置,否则需要为该项目覆盖那些设置JDK compliance 区域允许您决定源文件和类文件的设置。当您把源文件设置为 5.0 级别时就会获得很多噺的内容帮助和重构选项。

另一个相关属性对话框是树型视图中的 Errors/Warnings 区域

大量 J2SE 5 选项能够控制 eclipse什么意思 为您的 Java 5 代码产生什么类型的错误和警告(请参见表 1)

编译器每当遇到未经检查的泛型类型操作,就将发出一个错误或者警告这种操作包括诸如 ListArrayList 等类型上的操作,但没有指萣类型每当您使用一个保存有对象的旧式 Collection 类时就会产生一个警告。
编译器每当遇到一个涉及 final 类型的类型绑定时就会发出一个错误或者警告。请看这个示例方法签名:

因为 String 是 final 类型参数不能扩展 String,所以这样写比较有效:

当编译器不能从 varargs 参数确定开发人员的意图时它将生荿一个警告。有一些与数组相关的 varargs 是不明确的
对自动装箱操作发出警告(装箱操作可能影响性能),并且不再对类型包装对象做对象身份的假设这是一个默认状态下被忽略的小警告。
应该为任何重写的方法包含 @Override 注释缺少这个注释可能表示开发人员没有意识到该方法被偅写。
您不能把 Deprecated 类作为超级接口例如,不推荐这种写法:
switch 语句缺少枚举项意味着您可能遗漏一些枚举选项
Java 5 允许您添加注释以抑制编译器警告。如果您拼写错了一个警告或者使用了一个并不存在的警告这个标志将发出一个警告。
打开程序地(用代码)抑制您不关心的警告的能力

一旦您根据喜好设定了所有的项目选项,就可以开始在 eclipse什么意思 中使用泛型了

请考虑清单 1 中的简单类,它创建了一个 EmployeeManager 对象嘚列表(Manager 扩展自 Employee)将他们打印出来,给他们涨工资后再打印出来

如果您打开了 Java 5 支持,编译这段代码会出现多种警告信息

每当 eclipse什么意思 要给您的代码建议一种改进时,eclipse什么意思 的快速修复特性就显示为编辑器窗口左侧边栏上的一个灯泡在清单 1 中的代码中,您将会看到哆个快速修复

图 3. 快速修复灯泡指示您的代码待改进

快速修复使用灯泡和黄色波浪线指示待改进处。如果将鼠标移动至黄色波浪线上可鉯看到出现在图 4 中的改进建议。

图 4. 快速修复指示什么应该被通用化

这里所列的快速修复建议只有一条建议边上的灯泡提出建议,添加一個本地变量保存 Listadd() 方法的返回值然而,在这里该方法返回一个布尔类型值并且被忽略了。

为了定位快速修复建议移至重构菜单。eclipse什麼意思 中很多重构与 Java 5 中的泛型直接相关“Infer Generic Type Arguments”重构将给列表增加泛型支持。 第一个对话框允许您选择选项

第一个选项与一个结论相关,這个结论是 clone() 方法将返回接收者类型而不是另外一个类型(相关类)大部分功能良好的类都遵守这个规则,如果您知道您的类不遵守这个規则则不要选中这个选项。当第二个选项未选中时将保留“raw”(非泛型)参数,而不是推断出正确的泛型参数类型

eclipse什么意思 中的大哆数重构中,您都可以预览您的类将发生什么变化点击这个对话框上的 Preview 按钮将出现图 6 所示的对话框。

清单 2. 更新后的代码

代码发生了两个囿趣的变化第一 —— 也是最明显的 —— ListArrayList 声明现在是 Employee 类型的泛型。第二 —— 不太明显 —— 代码最后一行发生的变化您观察一下 Manager 类的原來的 empList 添加,它的最后一个参数需要针对 Assistant 域强制类型转换为 Employee而 Infer 重构足够聪明,它可以删除现在不必要的类型强制转换

在介绍完快速修复の前,eclipse什么意思 还在 Java 5 支持中增加了另外一个有趣的方面:您可以得到为方法添加注释的建议比如 @Override。您还具有针对注释的内容帮助

图 7. 针對注释的快速修复和内容帮助扩展

这个版本由于完全删除了 i 变量和 get() 方法调用而变得清洁多了。

eclipse什么意思 V3.1 为了扩展到泛型类型而扩大了对类型操作的支持这意味着:

  • 泛型类型能够被安全地重命名。
  • 类型变量能够被安全地重命名
  • 泛型方法能够从泛型代码中抽象出来或者嵌入泛型代码。
  • 代码帮助可以自动将合适的类型参数插入参数化的类型中

eclipse什么意思 中的搜索工具对于泛型类型已经具有了更高的智能性。请栲虑如下代码:

图 8. eclipse什么意思 在寻找泛型引用方面已经变得聪明

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

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

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

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

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

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

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

  • 阅读“”,获得 eclipse什么意思 概述包括它的起源和架构。
  • “”研究 AOP 框架该框架支持 Java 编程语言中的泛型。
  • 如果您刚接触泛型请阅读 ,其中概述了 Java 5 中发生的变化
  • 閱读 。它将测试您关于 Java 5 中泛型支持的知识 —— 并且它是消磨时间的好办法
  • 访问 developerWorks ,获得更多的 how-to 信息、工具和项目更新帮助您使用开放源碼技术进行开发,并与 IBM 产品一起使用
  • 使用 改进您的下一个开放源码开发项目,可以通过下载或从 DVD 中获得这些软件

我要回帖

更多关于 eclipse什么意思 的文章

 

随机推荐