Kotlin中访问匿名对象成员出现未解析引用,如何修复?
问题修复方案
你的代码报错是因为顶层作用域的匿名对象会被Kotlin编译器推断为Any类型,而Any没有header成员。要解决这个问题,有两种常用方法:
方法一:将匿名对象移到局部作用域
如果不需要在全局使用这个对象,把它放到函数内部(比如main函数里),此时编译器会保留匿名对象的实际类型,就能直接访问成员:
fun main() { val authorization = object { val header = "Authorization" } println("${authorization.header}") }
方法二:显式声明接口/类并实现
如果需要在全局使用这个对象,先定义一个包含所需成员的接口或类,让匿名对象实现它,同时给变量指定这个接口类型:
interface AuthInfo { val header: String } val authorization: AuthInfo = object : AuthInfo { override val header = "Authorization" } fun main() { println("${authorization.header}") }
关于你提到的Baeldung文章写法可行的原因:他们的示例里匿名对象是在**局部作用域(函数内部)**定义的,这种场景下Kotlin不会把类型推断为Any,而是保留匿名对象的具体类型,所以可以直接访问成员。
内容的提问来源于stack exchange,提问作者ceving
相关产品推荐
相关产品推荐

