final或val函数参数或在Kotlin中?
为什么Kotlin删除了在Java中非常有用的final或val函数参数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关键字,因为这是
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
。您必须引入单独的变量进行重新初始化。示例-
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。或者你可以建议编辑。