JDK类除了Javadoc之外还有其他任何规范吗?

JDK类除了Javadoc之外还有其他任何规范吗? 如果是这样,在哪里?

例如,考虑Collections.unmodifiableMap 。 它的Javadoc没有提及线程安全性; 所以,从Javadoc开始,我不能认为将结果映射暴露给其他线程是安全的,而不需要采取我自己的一些特殊步骤来获得线程安全性。 但恕我直言,任何现实的实现都会将内部地图存储在final字段中,因此在Java 5及更高版本中,只要内部地图是(在任何访问之间具有“先发生”关系),结果地图将是线程安全的生成的地图以及之前对内部地图的修改)。 例如,这就是OpenJDK实现的function。

那么,我怎么能弄清楚我是否可以轻易地假设一个给定的行为?

Javadoc是规范。 也就是说,编写良好的规范是非常困难的,平衡两者并不会遗漏有用的东西而不会过度使用(并破坏未来发展实现的能力)。

如果我不得不猜测,我会说这个被排除在规范之外的原因(除了可能的疏忽)是任何线程安全都是有条件的,而不是基础集合(a)不被发布和(b)不是在创建不可修改的视图后进行修改,这也必须仔细指定。

最后,只有一个连续体永远不会改变可能会改变下一个版本中的行为, 恰好在您的平台上运行 。 即使指定的行为也可以弃用,然后在某些时候删除,它只是极少发生(例如Thread.destroy )。 因此,您是否可以依赖合理但未指定的行为取决于您需要多么强大的保证,您希望在防御性编码方面花费多少精力/添加测试以确保您检测到未来的变化等。

但是,是的,javadocs是你可以获得的最强保证,其他一切意味着进入更薄的冰。

许多项目依赖于API,这些API不仅没有文档,而且被认为是内部的,表面上是特定于实现的。 sun.misc.Unsafe是这里的主要示例,其大部分function在9中被称为适当的JDK API。

Collections.unmodifiableMap的情况下,如果你想对安全发布真的保守,你可以在创建后插入商店围栏。