findViewById如何返回与View不同的内容,并且程序仍将被编译



我很震惊:(问这样一个问题,我感到很受欢迎,但我能解决。我有一个TextView,它是我的视图的一部分。以下代码是如何编译的:

val shouldBeTextView : String= view.findViewById(R.id.justSomething)

我查看了方法签名,发现它返回了View或子类型,但String、Int等(它们都有效(不是View的吗?也许编译器累了?:(我必须说,我在Java 中从未遇到过这样的问题

这是由于Koltin的类型和铸造系统。Kotlin足够聪明,可以看到您在变量中期望有一个字符串,并使用View.toString()在幕后进行强制转换,只要存在将receviedd类型强制转换为期望类型的方法,赋值就不会出现问题。以下所有内容大致等同于

val shouldBeTextView : String = view.findViewById(R.id.justSomething)
val shouldBeTextView : String = view.findViewById(R.id.justSomething).toString()
val shouldBeTextView : String = view.findViewById(R.id.justSomething) as String

最新更新