Hacker News 中文摘要

RSS订阅

Java 26年变迁评级 -- Rating 26 years of Java changes

文章摘要

作者回顾了Java语言26年来的发展历程,重点评价了Java SE核心语言和库的重大变化。从1999年Java 1.1.8到最新版本,Java已与最初版本大不相同。文章选取了具有历史意义的关键特性进行主观评述,但未涵盖UI、图形或虚拟机改进等内容。

文章总结

回顾Java 26年:版本特性评级

作者从1999年IBM实习期间使用Java 1.1.8开始,回顾了26年来Java SE的语言和核心库变化。以下是各版本重要特性的主观评分(满分10分):

划时代版本

  • Java 2 (1998)
    集合框架(4/10):替代原始数组/Vector/Hashtable,但设计存在缺陷
  • Java 5 (2004)
    泛型(8/10):虽存在类型擦除问题,但不可或缺
    并发工具(10/10):Doug Lea设计的完美实现
    自动装箱(7/10)、枚举(6/10)、foreach循环(8/10)等多项改进

关键改进

  • Java 7 (2011)
    try-with-resources(10/10):革命性的异常安全机制
  • Java 8 (2014)
    Lambda(4/10):匿名函数引发争议
    Stream API(1/10):被批评为过度复杂的设计失误
    Java Time(8/10):优秀的日期时间库

争议特性

  • Java 9 (2017)
    模块系统(-10/10):被认为带来混乱而无实质价值
  • Java 14 (2020)
    Record类(10/10):迟来的数据类支持
  • Java 21 (2023)
    字符串模板(10/10):期待已久的SQL/HTML安全插值方案

现代发展

  • Java 15+
    密封类(8/10)、虚拟线程(?/10)等逐步完善语言特性
  • Java 24 (2024)
    后量子加密算法:应对未来安全挑战

作者特别指出:Java从最初600页参考手册的规模,已发展为完全不同的语言。尽管存在设计失误(如Stream API),但核心改进如泛型、并发工具等深刻影响了编程实践。最新版本正通过Record、模式匹配等特性向函数式编程靠拢。

(注:本文省略了UI/图形相关及JVM改进内容,完整版本历史可参考维基百科)

评论总结

以下是评论内容的总结:

  1. 对Java特性的评价分歧

    • 部分用户认为流(Streams)和Lambda表达式评分过低(1/10和4/10),实际影响深远:"Streams are such a net positive"(MarkMarine);"Lambdas changed my programming style"(Arwill)。
    • 也有批评认为某些特性设计不佳,如注解滥用导致代码隐式耦合:"annotations can be used in extremely negative ways"(dkarl)。
  2. 新旧特性对比

    • 新特性(如类型推断var、文本块)受到欢迎:"var/val were my favorite discoveries"(newAccount2025);"text blocks are extremely useful"(nunobrito)。
    • 旧API(如java.util.Date)被普遍诟病:"how bad the previous version is"(rsynnott),而java.time被视为改进。
  3. 语言生态与历史影响

    • Java的企业级功能(如Servlet、Spring)被认为是成功关键:"dominated the scene because of Java EE"(zkmon)。
    • 批评集中在营销驱动而非技术革新:"demonstration of how to market a language"(travisgriggs)。
    • JIT编译器(如HotSpot)显著提升性能:"Java 1.3 started to change performance perception"(linuxhansl)。
  4. 与其他语言的比较

    • 部分特性借鉴自C#等语言:"most good changes are imported from C#"(iceboundrock)。
    • 用户转向Kotlin以规避Java的冗长:"elected to use Kotlin and happy with that"(travisgriggs)。
  5. 争议性设计

    • 自动装箱/拆箱可能引发空指针异常:"auto-unboxing should knock the score down"(sedro)。
    • 模块化系统(Modules)评分争议:"-10 for modules is fair"(Arwill)。
  6. 开发者体验

    • 部分API(如NIO)虽设计怪异但实用:"NIO is a 'Just Works' tool"(tombert)。
    • 断言(assertions)被低估:"Java assertions are really well-designed"(marginalia_nu)。
  7. 遗留问题

    • 长期缺失无符号整型:"still no unsigned integer types"(fleventynine)。
    • URL类设计不合理:"checks equality by connecting to the internet"(taspeotis)。

总结:评论反映了Java在现代化过程中的权衡——既通过引入新特性保持竞争力,又因历史包袱和设计妥协引发争议,同时其企业生态和性能优化仍受认可。