final或val函数参数还是在Kotlin中?

为什么Kotlin删除了在Java中非常有用的final或val函数参数?

fun say(val msg: String = "Hello World") { msg = "Hello To Me" // would give an error here since msg is val //or final ... ... ... } 

Kotlin函数参数是final的。 没有val或final关键字,因为这是默认的(不能更改)。

Kotlin M5.1支持可变参数删除之后,在早期版本中可以实现使用

 fun foo(var x: Int) { x = 5 } 

据Kotlin开发人员介绍,去除此function的主要原因如下 –

  1. 主要原因是这是令人困惑的:人们倾向于认为这意味着传递一个引用参数,我们不支持(这是昂贵的在运行时)。

  2. 混淆的另一个来源是主要构造函数:构造函数声明中的“val”或“var”意味着与函数声明(即创建属性)相同的东西。

  3. 另外,我们都知道mutating参数是不好的,所以在一个函数中写入“val”或“var”infront参数,for循环的catch块不再被允许。

总结 – 现在所有的参数值都是val 。 你必须引入单独的variables来重新初始化。 示例 –

 fun say(val msg: String) { var tempMsg = msg if(yourConditionSatisfy) { tempMsg = "Hello To Me" } }