Kotlin自定义类中函数引用未解决问题求助
搞定Kotlin里的「unresolved reference」错误
看你描述的情况,刚接触Kotlin遇到这种问题太正常了!从你贴的代码片段来看,shout()函数里只写了pri...,结合报错信息,我给你梳理几个最可能的原因和解决办法:
1. 私有成员的访问范围踩坑了
你的Test类里有个private var test: Test? = null,Kotlin里的private是类级私有——意思是只有当前实例自己能访问这个变量,哪怕是同类型的其他实例都碰不到。
举个错误示例:
fun shout(otherTest: Test) { println(otherTest.test) // 这里必报unresolved reference!test是private的 }
解决办法:
- 把
test的可见性改成protected(子类能访问)或者internal(同模块内可见); - 用你已经写好的
getBla()方法来获取,比如otherTest.getBla()。
2. 函数/变量拼写错了或者根本没定义
你贴的shout()函数只写了pri...,如果是你漏写了目标函数(比如想写print()却打错),或者想调用一个根本没在类里定义的私有函数,那肯定会报未解析引用。
比如你本来想写:
fun shout() { println("Hello Kotlin!") }
结果手滑写成了pri...,这种情况就仔细核对拼写,确保要调用的成员确实存在。
3. 抽象类实例化的小误区
你的Test是抽象类,不能直接val t = Test()实例化,必须通过子类继承后创建实例:
class TestImpl : Test() { // 如果Test里有抽象方法,这里需要实现 } // 正确调用方式 val myTest = TestImpl() myTest.shout()
如果是直接实例化抽象类,编译器会先报错,但如果是子类实例化后调用shout()出错,还是回到前面的成员访问或拼写问题。
先把shout()函数的完整代码补全,再对照上面的点排查,应该很快就能解决这个问题啦!
内容的提问来源于stack exchange,提问作者SN1984jm
相关产品推荐
相关产品推荐

