Kotlin中能否用接口作构造参数?遇未解析引用triangleB错误
问题原因及修复方案
报错原因
在Kotlin中,构造函数的参数如果没有用val或var修饰,它仅属于构造函数的局部作用域,类的其他成员(比如side的getter方法)无法直接访问这个参数。你写的TriangleBAdapter构造函数里的triangleB就是这种情况,所以在get()方法里访问this.triangleB时会提示“Unresolved reference”。
另外补充:原代码里this.triangleB.side也会报错,因为TriangleB接口定义的是side1、side2、side3,并没有side属性,后续需要根据实际需求替换为对应的边。
修复方法
有两种常见的修复方式:
方式一:给构造参数添加val或var修饰
直接让构造参数成为类的成员属性,类内部就能通过this.triangleB访问:
class TriangleBAdapter(val triangleB: TriangleB) : TriangleA { override val side: Double get() = this.triangleB.side1 override val corner1: Double get() = TODO("Not yet implemented") override val corner2: Double get() = TODO("Not yet implemented") }
方式二:手动定义私有成员变量并赋值
如果不想把构造参数暴露为类的公共属性,可以定义私有成员变量,在构造函数中赋值:
class TriangleBAdapter(triangleB: TriangleB) : TriangleA { private val triangleBRef = triangleB override val side: Double get() = triangleBRef.side1 override val corner1: Double get() = TODO("Not yet implemented") override val corner2: Double get() = TODO("Not yet implemented") }
内容的提问来源于stack exchange,提问作者jpours
相关产品推荐
相关产品推荐

