我有以下要弃用的功能扩展
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/