gpt4 book ai didi

android - Kotlin Android Studio - Var 在 SDK 29 中被视为 val

转载 作者:太空狗 更新时间:2023-10-29 12:59:21 25 4
gpt4 key购买 nike

我在 Kotlin 中遇到了一件非常奇怪的事情。我有

var myClipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager?
var myClip: ClipData? = ClipData.newPlainText( /* my code */ )

作为一个 var 变量,我应该能够重新分配他的值,但是当我这样做的时候

myClipboard?.primaryClip = myClip

它给了我错误

Val cannot be reassigned

最奇怪的是我几个星期都在使用这个代码,而且它总是有效。当我更新到 API 29 时它今天停止工作了

这是我的build.gradle android{}

    android {
compileSdkVersion 29
defaultConfig {
applicationId "com.arfmann.pushnotes"
minSdkVersion 23
targetSdkVersion 29
versionCode 16
versionName "1.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}

最佳答案

ClipboardManager documentation 中所示,getPrimaryClip 返回一个 ClipData?(即可为空的 ClipData),而 setPrimaryClip() 接受一个 ClipData - 非空 ClipData

当类型不同时,Kotlin 不支持 var 属性访问(并且可空性是 Kotlin 类型的重要组成部分)因此 Kotlin 只能有效地为您提供等效的 val当您调用 primaryClip 时。

setPrimaryClip 上的可空性注释已添加到 API 29 中,这就是升级 compileSdkVersion 后行为会有所不同的原因。

要设置主剪辑,您必须显式使用带有非空 ClipDatasetPrimaryClip(),或者在 API 28+ 上使用 clearPrimaryClip()完全清除主剪辑。

关于android - Kotlin Android Studio - Var 在 SDK 29 中被视为 val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57128725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com