Java是否允许在编译时进行不可变性检查?

时间:2016-04-25 21:46:46

标签: java exception

我知道至少有两种机制可以强制不应修改Collection:

但是,我注意到它们都通过抛出异常(例如UnsupportedOperationException)在运行时强制执行合同。

问题:

  1. 现有的库/语言功能是否允许在编译时执行不变性检查?
  2. 如果没有,为什么不呢?是因为语言限制,设计决策的结果还是其他原因?

2 个答案:

答案 0 :(得分:2)

你只能通过在课堂上没有变异方法来做到这一点。但是,如果你想实现一个具有变异语义方法的现有接口,你就会陷入困境(即使静态分析在一般情况下也不会帮助你)。

答案 1 :(得分:2)

Collections API的原始作者(遗憾的是)没有对不可变集合和可变集合进行区分。不可变的API没有变异方法(但可能会在内部重建集合为Persistent data structure)。

请参阅Scala作为JVM上支持不可变和可变集合的Collections API的示例。