我知道的至少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