Kotlin“也”功能在Android Studio中奇怪的警告

Ale*_*hov 5 android kotlin android-studio

大概有两个片段:

// Verbose version
val typedArray = context.obtainStyledAttributes(attrs, styleable)
block(typedArray)
typedArray.recycle()
Run Code Online (Sandbox Code Playgroud)
// One-line version
context.obtainStyledAttributes(attrs, styleable).also(block).recycle()
Run Code Online (Sandbox Code Playgroud)

我想知道为什么冗长的代码块在Android Studio中看起来不错,而单行版本突出显示了getStyleStyledAttributes并给出以下警告:

与#recycle()一起使用后,应回收此TypedArray。

有谁知道这仅仅是一个Android Studio的绒毛检查缺陷,还是单行版本实际上有问题?

Ben*_* P. 4

这有点猜测,但我相信这是因为静态分析工具不能保证返回TypedArrayalso()与返回的实例相同obtainedStyledAttributes()。它看到获得了 TypedArray,但不能保证它被回收,因此它发出警告。

我不太愿意将此称为 linter 中的错误(或“缺陷”),但这确实意味着在这种情况下可以忽略警告。

  • 如果 linter 可以跟踪特定方法的调用(例如 _obtainStyledAttributes()_ 或 _recycle()_),它也应该跟踪一些事情,例如标准 Kotlin 函数“也”总是返回相同的对象,所以我仍然认为它是一个缺陷。感谢您的回答,在我看来这是一个正确的猜测。 (2认同)
  • 请参阅 https://issuetracker.google.com/issues/139566120,“针对即将推出的 3.6 canary(可能是 canary 11)进行了修复”。 (2认同)