gpt4 book ai didi

kotlin - 为什么可以在子类型的重写成员函数中省略默认值?

转载 作者:IT老高 更新时间:2023-10-28 13:31:34 27 4
gpt4 key购买 nike

正如标题中所说:为什么可以在子类型的覆盖成员函数中省略默认值?

这是正常还是意料之中?

interface Foo {
fun bar(parameter: Int = 1)
}

class Baz : Foo {
override fun bar(parameter: Int) { // OK
println(parameter)
}
}

val baz = Baz()

baz.bar() // OK
baz.bar(2) // OK

Foo 是类的情况下的行为相同。

最佳答案

Is this normal or to be expected?

是的。

我怀疑这主要是语言设计/可用性决定。从这个角度来看,有四种选择:

  1. 仅在父类(super class)型中声明。
  2. 仅在子类型中声明。
  3. 在两者中声明,但不允许子类型更改默认值。
  4. 在两者中声明,允许子类型覆盖父类(super class)型中的默认值。

Kotlin 设计者选择了选项 #1。这是有道理的,因为:

选项 #2 和 #4 都暗示调用者不会知道默认值是什么,除非他们知道他们正在使用哪个实现,这当然是非常不受欢迎的。调用者需要额外的逻辑来确定是否需要一个值来覆盖默认值,这意味着默认值将无用。

选项 #3 违反 DRY principle .为什么要强制声明在两个地方?

这使得选项 #1 成为唯一明智的选择。

关于kotlin - 为什么可以在子类型的重写成员函数中省略默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37700828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com