kotlin - 我可以在 Kotlin 中使用接口(interface)类型作为构造函数参数吗

标签 kotlin constructor interface adapter

来自 Java,我为三角形定义了两个接口(interface):

interface TriangleA {
    val side: Double
    val corner1: Double
    val corner2: Double
}

interface TriangleB {
    val side1: Double   
    val side2: Double   
    val side3: Double   
}

然后我定义一个适配器类,它接受 TriangleB 并公开 TriangleA

class TriangleBAdapter(triangleB:TriangleB):TriangleA{

    override val side: Double
        get() = this.triangleB.side

    override val corner1: Double
        get() = TODO("Not yet implemented")

    override val corner2: Double
        get() = TODO("Not yet implemented")
}

为什么这不是有效的 Koltin?我收到“未解析的引用:triangleB”错误。

最佳答案

现在triangleB只是一个构造函数参数。在 Java 中,这看起来像这样:

class TriangleBAdapter implements TriangleA {

    public TriangleBAdapter(TriangleB triangleB) {
        // does nothing!
    }

    @Override
    public double getSide() {
        return triangleB.side; // error!
    }

    ...
}

您需要使 triangleB 也成为一个属性,有点像在 Java 中执行此操作:

private final TriangleB triangleB;
public TriangleBAdapter(TriangleB triangleB) {
    this.triangleB = triangleB;
}

您可以通过在其前面添加 val 来实现此目的,也可以选择添加 private:

class TriangleBAdapter(private val triangleB: TriangleB): TriangleA {

    override val side: Double
        get() = this.triangleB.side1

    ...
}

关于kotlin - 我可以在 Kotlin 中使用接口(interface)类型作为构造函数参数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73106240/

相关文章:

c# - 无法通过引用转换、装箱转换、拆箱转换、包装转换或空类型转换来转换类型

Kotlin:迭代对象的组件

android - `pagingAdapter.submitData()`之后的代码没有执行

c++ - 策略设计模式 - 用对象填充 C++ 类

swift - Kotlin 是否支持像 swift 这样的可选构造函数?

c++ - 如何使用包括派生接口(interface)在内的接口(interface)正确公开 C++ API?

Java/Kotlin JSON 解析改进

kotlin - Kotlin无法内联字节码

.net - 构造函数调用其他构造函数: any performance issues?

java - 与实现Iterable相关的对象类型有哪些