来自 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/