Kotlin中的“ toString”和“ as String”有什么区别?

时间:2019-10-25 03:20:59

标签: kotlin

我想获取View的文本。因此,我检查了该视图是否为TextView,并使用了v.text。 在这种情况下,v.textCharsequence!。我尝试将v.text更改为String。我遇到两种情况,v.text.toStringv.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
            }
        }
    }

2 个答案:

答案 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