为什么不在Java Standard API中使用commons-lang?

时间:2011-01-29 15:19:32

标签: java apache-commons-lang

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

2 个答案:

答案 0 :(得分:5)

正如已经指出的那样,commons API中的一些功能已经使它成为Java,经常实现(IMHO)比它们最初在commons库中更好。枚举就是典型的例子。

就他们为什么不采用更多公共语言而言,以及某些课程中存在混淆因素。以StrBuilder为例,它比Java StringBuilder更强大,并且可以扩展。但是我不确定我是不是要将这样的类添加到Java核心API中,StringBuilder / StringBuffer对于大多数目的来说都非常好,而在那里有另一个真的会变得有点混乱。它们无法真正改变StringBuilder以适应所有更改,因为这可能会破坏现有代码。即使他们确实添加了一个,那么当其他人出现另一个更强大的版本时呢? StrBuilder2?不久之后,一切都变得一团糟(有些人认为核心API已经存在,更不用说添加这些了。)

与往常一样,最重要的是应该包含什么来自commons-lang。有些人可能会想要添加MutableXXX类,其他人看XXXUtils类,其他人看时间包......实际上没有共识。

另一个重要的事情是Java开发人员必须更加小心核心Java API,而不是Apache开发人员为commons-lang做的事情。如果commons-lang中的一个糟糕的设计在将来的版本中被取代,那么旧版本可以被弃用并随后被删除(事实上这似乎就是这样。)在核心Java API中,它需要保持其向后兼容的原因,只是造成更杂乱。

虽然我认为它的价值更多,但我认为应该包含更多公共功能。我可以看到原因,至少部分是为什么不是。

答案 1 :(得分:1)

历史上,Apache Commons实现了后来在Java 5中引入的一些功能,例如枚举和注释。它们的实施方式完全不同,难以实现整合。