首页 > 解决方案 > 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) {

      }
   }

有没有办法解决这个问题或者我应该定义两种不同的方法

标签: androidkotlin

解决方案


你不能做这个。因为实现方法不能有默认值。如果您使用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)
}

}

推荐阅读