为什么在Kotlin中不推荐使用strip(),我应该使用什么来代替?
对于 String.strip() 我收到警告 'strip(): String!' is deprecated. This member is not fully supported by Kotlin compiler, so it may be absent or have different signature in next major version"
为什么?“strip”来自Java String 我应该使用什么?
回答
首先:String.strip()是 Java 11 中的一个新函数。Kotlin默认针对JVM 6,所以一开始我无法重现您的问题,我遇到了编译错误。在 Android Studio 中使用 JVM 11 作为目标可以处理您的编译器警告。
Kotlin 的字符串类 ( kotlin.String) 与 Java 的字符串类 ( java.lang.String) 不同。然而,Kotlin 类型映射到 Java 类型(quote):
科特林类型,例如
List,MutableList,String,CharSequence等等都编译成它们的Java当量,并且因此任何运行时检查将不能够在它们之间进行区分。然而,在编译时,它们是具有不同成员集的不同类型。特别是,Kotlin 类型没有对应 Java 类型的所有成员。他们在 Kotlin std lib 参考中列出了那些,以及一些额外的 JVM 特定的(例如Collection.stream())
kotlin.String没有.strip()功能。您只是“顺便”调用java.lang.String.strip(),它恰好存在于某些目标 JVM 中,但未在 Kotlin 中定义。如果您查看kotlin.StringIDE中的源代码,您会发现它没有在那里定义。
它不存在的原因是因为它被 Kotlin 团队明确列入了灰名单:
JDK 类中的某些方法在 Kotlin 内置函数中是不受欢迎的(例如,很多 String 方法或 List.sort(),因为已经定义了具有更好签名的 Kotlin 类似物)。
.strip()与 做同样的事情kotlin.String.trim(),所以改用它。
-
延伸阅读
-
延伸阅读 2
-
列入
.strip()灰名单的提交