Android Studio 3.1中Kotlin调用toUpperCase报未解析引用问题求助
解决Kotlin中String!调用toUpperCase()未解析引用的问题
我来帮你搞定这个问题!在Android Studio 3.1的Kotlin项目里遇到这个情况,主要有两个核心原因,咱们一步步解决:
1. 平台类型的空安全与函数识别问题
你拿到的String!是Kotlin的平台类型,它对应Java的String,既可能为null也可能不为null,这种模糊性有时候会让IDE无法正确识别Kotlin的扩展函数。另外,早期Kotlin版本(AS3.1配套的Kotlin大概是1.2.x)里,无参的toUpperCase()其实并不推荐使用,反而要求指定Locale来避免国际化问题,这也可能是IDE标红的原因。
2. 正确的代码写法
安全处理空值的版本(推荐)
如果不确定nextString()会不会返回null,用空安全调用配合默认值:
val name = reader.nextString()?.toUpperCase(Locale.getDefault()) ?: ""
确定非空的版本
如果你能保证nextString()一定返回非空字符串(比如Json结构里这个字段是必填的),可以直接用:
val name = reader.nextString().toUpperCase(Locale.ROOT)
这里用Locale.ROOT是为了避免系统默认Locale带来的大小写转换差异,如果你需要适配用户的系统语言,换成Locale.getDefault()就行。
3. 检查Kotlin版本兼容性
AS3.1对Kotlin版本有要求,确保你的项目配置了兼容的版本:
- 在项目根目录的
build.gradle里:
buildscript { ext.kotlin_version = '1.2.30' // 这个版本和AS3.1完美兼容 dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
- 在模块的
build.gradle里:
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" }
做完这些操作后,Sync一下项目,IDE应该就能正确识别toUpperCase()函数了。
内容的提问来源于stack exchange,提问作者Johannes M
相关产品推荐
相关产品推荐

