javax vs java包

Jak*_*čar 367 java

javax包背后的理由是什么?什么进入java和什么进入javax?

我知道很多企业-y包都在javax中,但是Swing,新的日期和时间api(JSR-310)以及其他J2SE包也是如此.

Tof*_*eer 228

最初javax本来是用于扩展,有时候事情会从javax升级到java.

一个问题是Netscape(可能还有IE)限制了可能在java包中的类.

当Swing被设置为从javax"毕业"到java时,有一种小小的爆炸,因为人们意识到他们必须修改他们的所有进口.鉴于向后兼容性是Java的主要目标之一,他们改变了主意.

在那个时间点,至少对于社区(可能不是对于Sun而言),javax的全部内容都已丢失.所以现在我们在javax中有一些东西可能应该在java中......但除了选择包名的人之外,我不知道是否有人可以根据具体情况弄清楚原理是什么.

  • "当Swing被javax从"毕业"转为java时,有一种小小的打击,因为人们意识到他们必须修改所有的进口." 人们抱怨可以使用正则表达式完成某些事情,这是因为他们使用了预生产质量代码? (10认同)
  • 对.我在Visual Cafe中编写了一个工具,在Sun决定将它保存在javax包之前,在两者之间进行转换(javax和java). (10认同)
  • 通过同时在两个命名空间中使用 swing,并为 javax 中的命名空间添加弃用警告,可以缓解 swing 问题。 (6认同)
  • @jgomo3 问题在于,除非他们向 Java 添加类型别名,否则使用“java.swing”的代码和使用“javax.swing”的代码将无法互操作。 (2认同)
  • @SolomonUcko你是对的。有趣的语言功能。Clojure 有它。Java 中的一种解决方法是使“javax.swing.X”成为一个虚拟类,为所有“X”扩展“java.swing.X”。 (2认同)

Jon*_*eet 204

我认为这是一个历史性的事情 - 如果一个软件包是作为现有JRE的补充而引入的,那么它就是javax.如果它是作为JRE的一部分首次引入的(就像NIO那样,我相信)那么它就像是java.不知道为什么新的日期和时间API最终会javax遵循这个逻辑......除非它也可以单独作为库使用以使用早期版本(这将是有用的).许多年后的注意事项:它实际上终于进入java了.

我相信java包有一些限制- 我认为类加载器被设置为允许java.*加载类rt.jar或类似的类.(当然有办理入住手续ClassLoader.preDefineClass.)

编辑:虽然官方解释(搜索orbfish建议在第一页左右没有产生一个)毫无疑问是"核心"与"扩展",我仍然怀疑在许多情况下,任何特定包的决定都有背后的历史原因.是java.beans真的"核心"到Java,例如?

  • 因为阅读器更容易击中alt-t并输入它比使用iPad进行剪切和粘贴更容易?).你是对的,我认为*我的意思是http://download.oracle.com/javase/tutorial/ext/index.html.没有冒犯BTW我通常会发现你的答案很有用我很惊讶这个被接受了. (7认同)

duf*_*ymo 51

java包是"基础",javax包是扩展.

Swing是一个扩展,因为AWT是最初的UI API.之后,版本1.1中出现了Swing.


Vin*_*lds 37

javax命名空间通常(这是一个加载的单词)用于标准扩展,目前称为可选包.标准扩展是非核心API的子集; 非核心API的另一部分显然称为非标准扩展,占用com.sun.*或com.ibm等命名空间..核心API占用了java.命名空间.

并非Java API世界中的所有内容都以核心开头,这就是扩展通常源于JSR请求的原因.他们最终根据"明智的建议"晋升为核心.

对这个命名法的兴趣来自于Sun的一个失礼 - 扩展可能已被提升为核心,即从javax.*转移到java.*打破了向后兼容性承诺.程序员声音嘶哑,更好的感觉占了上风.这就是为什么Swing API虽然是核心的一部分,仍然继续保留在javax.*命名空间中.这也是如何将包从扩展提升到核心 - 它们只是作为JDK和JRE的一部分提供下载.

  • 好吧,先生。这应该已经在这里接受了。 (2认同)