升级应用程序以在Java中使用泛型有哪些注意事项?
我正在使用一个旧的Java应用程序,它是在泛型可用之前为Java1.4编写的。从那时起,我们已经完成了对Java6的升级 我们现在正在考虑进行更改,以支持集合中的泛型,从而有利于编译时类型安全检查,并保持开发人员的健全性 在执行此升级时,我们是否应该注意任何注意事项或问题升级应用程序以在Java中使用泛型有哪些注意事项?,java,generics,Java,Generics,我正在使用一个旧的Java应用程序,它是在泛型可用之前为Java1.4编写的。从那时起,我们已经完成了对Java6的升级 我们现在正在考虑进行更改,以支持集合中的泛型,从而有利于编译时类型安全检查,并保持开发人员的健全性 在执行此升级时,我们是否应该注意任何注意事项或问题 了解Java泛型的工作原理及其局限性 使用具有良好重构支持的IDE 慢慢地小心地做 先做一些简单的事情,不要跳进创建复杂的泛型类,等等,直到你知道它们是真正需要的 抵制添加@SuppressWarning(“unchecked
@SuppressWarning(“unchecked”)
以消除警告的诱惑这里没有什么特别深刻的…升级IMHO最重要的部分是确保开发人员对泛型有深入的了解,特别是在将集合传递到函数并从函数返回集合方面,如
List
,您应该始终能够放入泛型,即使您正在使用泛型对象或?占位符
使转换顺利/不顺利的另一件事是依赖于代码,即您有包含单个类型的集合,没有强制转换的混合对象?或对象“捕获所有对象”。这可能相当常见,尤其是在地图上
如果使用任何基础库、Hibernate等,如果基础库不支持泛型,则可能会遇到限制。在这种情况下,您要么泄漏库代码,要么包装对象(不推荐)
更改有意义的部分,保留没有意义的部分,并分阶段进行,以便在遇到问题时始终可以回滚一个部分。Stephen非常喜欢,但我要补充一些技巧 1) 由于泛型只在编译时使用,所以在一些地方它们是无用的,比如反射和在会话中存储对象(如果这是一个web项目)。我不知道有什么干净的办法来处理这件事。我建议只将它产生的任何内容声明为
,并只处理类型检查
2) 这是一个在过去让我感到痛苦的故事。在方法定义中,使用
列表
,并去掉它们。但是,我建议您不要这样做,除非代码的这部分不能使用泛型(请参阅我的第一点)。最好是有你计划修复的警告,而不是你计划改进的错误修复,因为你可能永远不会改进它们,而且每次你看你的项目时,警告都会当面出现。请参见。特别是第10段“将遗留代码转换为使用泛型”。该文档中的建议当然值得一读:有一些真正的问题,特别是如果您与其他用户而不是独立的应用程序开发API。谢谢。我很幸运,我的代码是一个独立的应用程序,而不是API。其他人可能没有这么幸运。+1:您希望避免使用的注释是@SuppressWarning(“unchecked”)
注意:即使是JDK集合也会使用这些警告编译:(@Peter-是的,在某些情况下,注释是不可避免的。但信息是,它应该作为最后手段使用。“unchecked”必须是小写的字符串。我认为大多数人避免使用它是因为不知道它在那里。;)你能举一个例子,说明在哪些情况下,未经检查的警告不能通过使用和强制转换来避免吗?我想我从没见过that@Stephen我是一个对编译器有不同警告的人,我倾向于不一致地忽略这些警告