5

似乎我加入或开始的每个 java 项目总是将 commons-lang 作为依赖项——这是有充分理由的。commons-lang 有大量的类和实用方法,它们与其他语言中最标准的 API 相当标准。为什么 Sun/Oracle/JCP 没有在标准 api 中采用 commons-lang 中的一些东西?

4

2 回答 2

5

正如已经指出的那样,commons API 中的一些特性已经进入 Java,通常实现(恕我直言)比最初在 commons 库中更好。枚举是典型的例子。

至于为什么他们不采用更多的 commons-lang,那么对于某些类来说,存在混淆的元素。以 StrBuilder 为例,它比 Java StringBuilder 更强大,而且可扩展。但是我不确定我是否会在 Java 核心 API 中添加这样一个类,StringBuilder/StringBuffer 对于大多数用途来说已经足够好了,如果再添​​加一个类的话,真的会变得有点混乱。他们也无法真正以适应所有更改的方式更改 StringBuilder,因为这可能会破坏现有代码。即使他们确实添加了一个,但当其他人推出另一个更强大的版本时呢?StrBuilder2?不久之后,一切都变得一团糟(有些人认为核心 API 已经是这样了,更不用说添加这些内容了。)

与这些东西一样,重点是应该从 commons-lang 中包含的内容。有些人可能希望看到添加的 MutableXXX 类,其他人的 XXXUtils 类,其他人的时间包......实际上并没有共同的共识。

另一件大事是,Java 开发人员必须比 Apache 开发人员对 commons-lang 所做的更加小心。如果在未来的版本中取代了 commons-lang 中的糟糕设计,那么旧的设计可能会被弃用并随后被删除(实际上这似乎是发生的事情。)在核心 Java API 中,出于向后兼容性的原因,它需要保留,只是导致更混乱。

尽管我确实认为应该包含更多 commons-lang 中的功能,但它的价值是什么。我可以看到原因,至少部分地,为什么它不是。

于 2011-01-29T17:31:07.887 回答
1

从历史上看,Apache Commons 实现了一些后来在 Java 5 中引入的特性,例如枚举和注释。它们的实现有很大的不同,使集成变得困难。

于 2011-01-29T15:31:09.087 回答