官术网_书友最值得收藏!

Immutability

Immutability is the opposite of mutation. Mutation is where we modify the state of an object. Mutation is error-prone and makes debugging difficult. Kotlin emphasizes immutability with val, which makes a variable immutable. Its collection types are also immutable by default. Once the val or collection is initialized, it is guaranteed to hold the same value. Immutability makes code easier to write and use and the internal state of the application will be more consistent.

Let's consider the following code sample:

object ImmutabilityTest {
@JvmStatic
fun main(args: Array<String>) {
val msg = "Hello"
msg = "hi"
println(msg)
}
}

In the preceding code, we created a immutable variable, msg, assigned a value. We then try to change its value.

If we compile this code, it gives us a compilation error that the value of msg cannot be changed:

[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to ..\Intermixing Java and Kotlin\myJavaApp\target\classes
[INFO]
[INFO] --- kotlin-maven-plugin:1.2.41:compile (compile) @ myJavaApp ---
[ERROR] ..\Intermixing Java and Kotlin\myJavaApp\src\main\java\ImmutabilityTest.kt: (5, 9) Val cannot be reassigned

Consider the following example as well:

object ImmutabilityTest {
@JvmStatic
fun main(args: Array<String>) {
val msg: String
msg = "Good Morning"
msg = "Good Evening"

println(msg)
}
}

In the preceding code, we created a immutable variable, msg, which is of the String type. Note that we declared the type explicitly here and varied the initialization of msg. When we are varying the initialization, we have to declare the type explicitly. We then try to change its value. 

If we compile this code, it also gives us a compilation error that the value of msg cannot be changed:

[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to ..\Intermixing Java and Kotlin\myJavaApp\target\classes
[INFO]
[INFO] --- kotlin-maven-plugin:1.2.41:compile (compile) @ myJavaApp ---
[ERROR] ..\Intermixing Java and Kotlin\myJavaApp\src\main\java\ImmutabilityTest.kt: (6, 9) Val cannot be reassigned
主站蜘蛛池模板: 新绛县| 莲花县| 呼和浩特市| 汉阴县| 秭归县| 长丰县| 砚山县| 阳西县| 枝江市| 招远市| 水富县| 云南省| 年辖:市辖区| 泰州市| 辰溪县| 綦江县| 岗巴县| 陈巴尔虎旗| 彩票| 湖北省| 邢台市| 木兰县| 斗六市| 抚顺市| 临沂市| 湟源县| 靖西县| 鱼台县| 抚顺市| 安阳县| 满城县| 囊谦县| 东山县| 镇原县| 南丹县| 元阳县| 安龙县| 乐山市| 玛多县| 兴仁县| 新蔡县|