我知道的至少2个机制来强制执行集合不应修改:Java在编译时允许不变性检查吗?
- Java的不可修改的类别:http://www.tutorialspoint.com/java/util/collections_unmodifiablelist.htm
- 番石榴的不可变的集合:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableList.html
不过,我注意到两个他们通过抛出异常(例如UnsupportedOperationException)在运行时执行合同。
问题:
- 是否有现有的库/语言功能,允许在编译时来执行不变性检查?
- 如果不是,为什么不呢?是因为语言限制,设计决定的结果还是其他原因?
值得明确呼吁http://docs.oracle.com/javase/1.5.0/docs/guide/collections/designfaq.html#1他们讨论这一点。 (Tl; dr:他们试过并放弃了。) –
这个答案解决了我的两个问题。 – maditya