Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
final或val函数参数或在Kotlin中?_Kotlin - Fatal编程技术网

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

final或val函数参数或在Kotlin中?,kotlin,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函数参数为最终参数。没有val或final关键字,因为这是

为什么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函数参数为最终参数。没有val或final关键字,因为这是默认值(并且不能更改)。

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

fun foo(var x: Int) {
  x = 5
}
据Kotlin开发者称,删除此功能的主要原因如下:

  • 主要原因是这让人困惑:人们倾向于认为这意味着通过引用传递参数,而我们不支持这一点(在运行时代价高昂)

  • 另一个混淆的来源是主构造函数:“val”或“var”在构造函数声明中的意思与函数声明(即,它创建属性)中的同一事物不同

  • 另外,我们都知道变异参数不是好的样式,所以在函数中的参数前面写“val”或“var”,for循环的catch块不再被允许

  • 摘要-现在所有参数值均为
    val
    。您必须引入单独的变量进行重新初始化。示例-

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

    另一个原因是val和var只相差一个字母。这可能非常令人困惑。因此,对于函数参数,他们完全删除了该选项。这样就消除了这一小范围内的混乱(但仍将其保留在其他地方——如图所示)。

    这里的相关3年讨论:是的,我甚至没有注意到。是否可以将一个方法设置为final,这样,如果任何类从当前类扩展,它将无法重写此函数?@androiddeveloper这是默认设置。阅读当你在做这件事的时候,请阅读手册的其余部分,它简短易读。@jbnize奇怪的是,在我的例子中,它不是为我创建的抽象类。它允许我覆盖所有函数。希望得到一些东西,然后发现它已经存在,这很好,不是吗?:)哈哈,是的,你说得对。我使用的是kotlin版本1.3.31,它不允许我将var作为函数parameter@DanielWilson我不确定你遵循什么准则。但通常我会在变量名前面加上temp。或者你可以建议编辑。