如果你可以大大改变Java的类路径库,你会做出哪些不同的决定?

时间:2010-07-08 23:25:56

标签: java classpath class-design

如果您有机会显着更改/更新Java的类路径库,您会添加/更新/更改/弃用/删除哪些内容?

3 个答案:

答案 0 :(得分:3)

我在与RuntimeException相同的级别添加CheckedException(使人们“不得”捕获异常的频率降低)

我会删除所有已弃用的API。

我将删除旧的集合类,如Vector和Dictionary。

我会在IOException下加载异常类。

我将替换尽可能多的public static final int X;尽可能使用枚举。

答案 1 :(得分:2)

  • 将当前远程单片类库的所有各个方面重构为具有较低相互依赖性的单独模块。这需要分离接口并将默认实现提供给独特的类层次结构(类似于已经存在的SAX API)。基本原理:允许使用精简类库进行部署,并另外启用第三方替换和某些中心方面的扩展(加密,网络协议,i18n,...)。

  • 将所有集合类和一些java.lang类重新设计为更小的构建块,这些构建块可以组装成更灵活,更强大的数据结构(沿着Google Collections类的理念)。这将提供更多与上下文无关的行为接口,例如CharSequence或Comparable。

  • 提供更多特定于平台的(扩展)API和实现,涵盖支持平台的合理范围(并随之增长)并接受使用这些类的代码在没有额外工作的情况下将无法移植来自开发者。这意味着允许创建能够在可用性,有用性和一般感知质量方面与本机软件竞争的非平凡软件。这些API例如允许访问块设备,vt100终端,Windows注册表等。

  • 以多层方式重新设计Swing(即在图形基元API顶部的基本构建块之上进行控制)并使其更具多态性。即单个Action接口,使用单个方法perform而不是许多特殊的Listener接口。另外,我提供了一个封装原生GUI组件的封装框架(根据我之前提议的精神)。

  • 尝试找到一种更好的方法来处理沙箱环境的安全相关访问限制,这些限制不会限制许多重要基础类的整体灵活性。目前用于设计目的的语言特性因安全目的而被严重滥用,这导致了相当静态和非多态的类和API,因为如果它们更开放,它们可以在沙箱内进行展示(并且该方法仍然不够安全很多)很多次)。

  • 提供一个不那么天真的序列化系统,支持弱引用,有错误检测并支持类演化。

答案 2 :(得分:1)

我将摆脱Object.hashCode并改为定义Hashable / Hasher接口。 (但是我会保留System.identityHashCode(Object),因为尽管它有开销,但是它做了一些非常有用的事情,这是不可能做到的。)

我将摆脱Object.equals并定义一个Equatable / Equater接口。 (但如果我可以管理它,可以使用更好的名字。)

我摆脱了Object.clone。我可能会将它保留为数组类的方法。

我摆脱了Object.finalize并用天真的C / C ++程序员不会注意到的东西替换它,直到他们有足够的经验知道最终确定几乎总是错误的解决方案。

我摆脱了System.gc();

我用一些使用Readers / PrintWriters的东西替换了那些笨重的全局System.in/out/err东西,而且很容易被线程或线程组“限定”。

我删除了对任何对象进行原始锁定的能力(...确定不是严格的库更改)。

我试着弄清楚如何实现thread.stop / suspend / resume的安全版本......即使这意味着在J2SE JVM中实现Isolates。