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

问题描述 投票:0回答:1

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

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")
}

为什么这不是有效的 Kotlin?我收到“未解析的参考:triangleB”错误。

kotlin constructor interface adapter
1个回答
3
投票

现在

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

    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.