Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
升级应用程序以在Java中使用泛型有哪些注意事项?_Java_Generics - Fatal编程技术网

升级应用程序以在Java中使用泛型有哪些注意事项?

升级应用程序以在Java中使用泛型有哪些注意事项?,java,generics,Java,Generics,我正在使用一个旧的Java应用程序,它是在泛型可用之前为Java1.4编写的。从那时起,我们已经完成了对Java6的升级 我们现在正在考虑进行更改,以支持集合中的泛型,从而有利于编译时类型安全检查,并保持开发人员的健全性 在执行此升级时,我们是否应该注意任何注意事项或问题 了解Java泛型的工作原理及其局限性 使用具有良好重构支持的IDE 慢慢地小心地做 先做一些简单的事情,不要跳进创建复杂的泛型类,等等,直到你知道它们是真正需要的 抵制添加@SuppressWarning(“unchecked

我正在使用一个旧的Java应用程序,它是在泛型可用之前为Java1.4编写的。从那时起,我们已经完成了对Java6的升级

我们现在正在考虑进行更改,以支持集合中的泛型,从而有利于编译时类型安全检查,并保持开发人员的健全性

在执行此升级时,我们是否应该注意任何注意事项或问题

  • 了解Java泛型的工作原理及其局限性
  • 使用具有良好重构支持的IDE
  • 慢慢地小心地做
  • 先做一些简单的事情,不要跳进创建复杂的泛型类,等等,直到你知道它们是真正需要的
  • 抵制添加
    @SuppressWarning(“unchecked”)
    以消除警告的诱惑

  • 这里没有什么特别深刻的…

    升级IMHO最重要的部分是确保开发人员对泛型有深入的了解,特别是在将集合传递到函数并从函数返回集合方面,如
    List
    ,您应该始终能够放入泛型,即使您正在使用泛型对象或?占位符

    使转换顺利/不顺利的另一件事是依赖于代码,即您有包含单个类型的集合,没有强制转换的混合对象?或对象“捕获所有对象”。这可能相当常见,尤其是在地图上

    如果使用任何基础库、Hibernate等,如果基础库不支持泛型,则可能会遇到限制。在这种情况下,您要么泄漏库代码,要么包装对象(不推荐)


    更改有意义的部分,保留没有意义的部分,并分阶段进行,以便在遇到问题时始终可以回滚一个部分。

    Stephen非常喜欢,但我要补充一些技巧

    1) 由于泛型只在编译时使用,所以在一些地方它们是无用的,比如反射和在会话中存储对象(如果这是一个web项目)。我不知道有什么干净的办法来处理这件事。我建议只将它产生的任何内容声明为
    ,并只处理类型检查


    2) 这是一个在过去让我感到痛苦的故事。在方法定义中,使用
    列表
    ,并去掉它们。但是,我建议您不要这样做,除非代码的这部分不能使用泛型(请参阅我的第一点)。最好是有你计划修复的警告,而不是你计划改进的错误修复,因为你可能永远不会改进它们,而且每次你看你的项目时,警告都会当面出现。

    请参见。特别是第10段“将遗留代码转换为使用泛型”。该文档中的建议当然值得一读:有一些真正的问题,特别是如果您与其他用户而不是独立的应用程序开发API。谢谢。我很幸运,我的代码是一个独立的应用程序,而不是API。其他人可能没有这么幸运。+1:您希望避免使用的注释是
    @SuppressWarning(“unchecked”)
    注意:即使是JDK集合也会使用这些警告编译:(@Peter-是的,在某些情况下,注释是不可避免的。但信息是,它应该作为最后手段使用。“unchecked”必须是小写的字符串。我认为大多数人避免使用它是因为不知道它在那里。;)你能举一个例子,说明在哪些情况下,未经检查的警告不能通过使用和强制转换来避免吗?我想我从没见过that@Stephen我是一个对编译器有不同警告的人,我倾向于不一致地忽略这些警告