- Functional Kotlin
- Mario Arias Rivu Chakraborty
- 266字
- 2021-06-24 19:15:28
Immutable reference (referential immutability)
Referential immutability enforces that, once a reference is assigned, it can't be assigned to something else. Think of having it as a val property of a custom class, or even MutableList or MutableMap; after you initialize the property, you cannot reference something else from that property, except the underlying value from the object. For example, take the following program:
class MutableObj { var value = "" override fun toString(): String { return "MutableObj(value='$value')" } } fun main(args: Array<String>) { val mutableObj:MutableObj = MutableObj()//(1) println("MutableObj $mutableObj") mutableObj.value = "Changed"http://(2) println("MutableObj $mutableObj") val list = mutableListOf("a","b","c","d","e")//(3) println(list) list.add("f")//(4) println(list) }
Have a look at the output before we proceed with explaining the program:

So, in this program we've two val properties—list and mutableObj. We initialized mutableObj with the default constructor of MutableObj, since it's a val property it'll always refer to that specific object; but, if you concentrate on comment (2), we changed the value property of mutableObj, as the value property of the MutableObj class is mutable (var).
It's the same with the list property, we can add items to the list after initialization, changing its underlying value. Both list and mutableObj are perfect examples of immutable reference; once initialized, the properties can't be assigned to something else, but their underlying values can be changed (you can refer the output). The reason behind that is the data type we used to assign to those properties. Both the MutableObj class and the MutableList<String> data structures are mutable themselves, so we cannot restrict value changes for their instances.
- arc42 by Example
- Oracle Database In-Memory(架構與實踐)
- Practical Internet of Things Security
- Mastering Spring MVC 4
- PHP網絡編程學習筆記
- Python漫游數學王國:高等數學、線性代數、數理統計及運籌學
- HTML5+CSS3網站設計基礎教程
- Access 2016數據庫管
- 名師講壇:Spring實戰開發(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
- 低代碼平臺開發實踐:基于React
- 劍指大數據:企業級數據倉庫項目實戰(在線教育版)
- Learning R for Geospatial Analysis
- PHP+Ajax+jQuery網站開發項目式教程
- 零基礎輕松學C++:青少年趣味編程(全彩版)
- 零基礎學Java第2版