android - Kotlin,用相同的方法实现两个接口并具有默认值
问题描述
假设我有两个具有相同方法名称和签名的接口,并且其参数具有默认值,由单个类实现,将会出现编译错误:
多个重写描述符为 'value-parameter b: Boolean = ... 声明了一个默认值,因为编译器无法确保这些值一致,所以这是不允许的。
前任:
interface A {
fun f(b: Boolean = true)
}
interface B {
fun f(b: Boolean = false)
}
class C : A, B {
override fun f(b: Boolean) {
}
}
有没有办法解决这个问题或者我应该定义两种不同的方法
解决方案
你不能做这个。因为实现方法不能有默认值。如果您使用C().f()
编译器将如何知道使用哪个默认值?因为C()
是 AnA
并且它也是 a B
。
C().f()
必须调用C.f(true)
,因为 true 是 A 中的默认值。
C().f()
还必须调用C().f(false)
,因为 false 是 B 中的默认值。所以这是一个冲突,是不允许的。
你可以做这样的事情来实现你想要的:
interface A {
fun f(b)
fun f(){f(true)}
}
interface B {
fun f(b)
fun f(){f(false)}
}
class C : A, B {
override fun f(b: Boolean) {
}
override fun f() {
// now you can define which default value is used for class C
// You can define either true or false
f(true)
}
}