gpt4 book ai didi

Kotlin @Deprecated ReplaceWith 将函数更改为变量赋值

转载 作者:行者123 更新时间:2023-12-04 01:12:12 52 4
gpt4 key购买 nike

我有以下要弃用的功能扩展

fun <T : View> T.setVisible(visible: Boolean) {
visibility = if (visible) View.VISIBLE else View.GONE
}

弃用的用法:
myTextView.setVisible(true)

新用法:
myTextView.isVisible = true

我正在尝试编写一个 @Deprecated ReplaceWith 表达式,它将自动修复此弃用。我尝试了以下方法,但似乎不起作用:
@Deprecated("Use Android KTX isVisible", replaceWith = ReplaceWith("isVisible = visible", "androidx.core.view.isVisible"))
fun <T : View> T.setVisible(visible: Boolean) {
visibility = if (visible) View.VISIBLE else View.GONE
}

当我在“myTextView.setVisible(true)”上按 Alt+ENTER 并从弹出窗口中选择“Replace with isVisible = visible”时,它只会删除我已弃用的​​代码

是否有 ReplaceWith 表达式可用于自动修复我的代码(将函数调用更改为赋值)?

最佳答案

同时,在修复相关错误之前,这里有一些解决方法,所有这些都有自己的特定缺点:

  • 替换为无用的类型转换:
    ReplaceWith("(this as T).isVisible = visible")

    这会将您的代码转换为:
    (myTextView as View).isVisible = true

    IDE 可能会警告您不需要此转换,您可以在第二步中修复此问题
  • 使用类似 also 的东西
    ReplaceWith("also { it.isVisible = visible }")

    它将您的代码转换为:
    myTextView.also { it.isVisible = true }

    这段代码可能不会在你的 IDE 中引起任何警告,但它显然比需要的要长
  • 与之前类似,但使用 apply :
    ReplaceWith("apply { this@apply.isVisible = visible }")
    // leading to:
    myTextView.apply { isVisible = true }

  • 如果您没有其他方法可以轻松更改调用者代码并希望为您的调用者提供一些帮助来替换那些不会立即删除最重要信息的已弃用代码;-) 如果您有权访问调用者代码,那么您最好手动替换它;-)

    关于Kotlin @Deprecated ReplaceWith 将函数更改为变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53024849/

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