我想获取View的文本。因此,我检查了该视图是否为TextView,并使用了v.text
。
在这种情况下,v.text
是Charsequence!
。我尝试将v.text
更改为String。我遇到两种情况,v.text.toString
和v.text as String
。它们有什么区别?
override fun onClick(v: View?) {
when(v) {
is TextView -> {
Log.d("v.text", v.text)
// v.text is Charsequence but msg need String
}
}
}
答案 0 :(得分:2)
v.text as String
的意思是“强制将v.text
强制转换为String
”。如果v.text
恰好是CharSequence
以外的其他String
类型,例如,这会使您的应用程序崩溃。 SpannedString
。尽管它在许多情况下都可以使用,因为v.text
通常是String
,但这不是您应该使用的。
v.text.toString()
的意思是“在toString
对象上调用v.text
方法”。这将返回对象的String
表示形式,在这种情况下,应使用该表示形式。
以下是一些示例代码来演示区别:
v?.text = SpannedString("spanned string")
// Will print "v.text : spanned string" to logcat
Log.d("v.text", v?.text.toString())
// Will crash with java.lang.ClassCastException: android.text.SpannedString cannot be cast to java.lang.String
Log.d("v.text", v?.text as String)
答案 1 :(得分:1)
toString()
是从Some
类型到String
类型的对话。
as String
是不安全的转换,可能导致ClassCastException
。