我正在从Java迁移到Kotlin进行Android开发。我想检查EditText中的字段是否为空。所以我试图做到这一点:
override fun checkFields() {
val username = username.text.toString().trim().takeUnless { username.text.isNullOrEmpty() } ?: presenter.usernameError()
val password = password.text.toString().trim().takeUnless { password.text.isNullOrEmpty() } ?: presenter.passwordError()
presenter.signInWithUsernameAndPassword(username as String,password as String)
}
但有两个问题:
signInWithUsernameAndPassword
它崩溃了,因为给了我这个错误:
java.lang.ClassCastException:kotlin.Unit无法强制转换为java.lang.String
为什么呢? takeUnless{}
将String转换为Unit?
由于
答案 0 :(得分:3)
该方法中的第一个语句类似于Java中的以下内容。
String username = !username.text.isNullOrEmpty() ? username.text.toString().trim() : presenter.usernameError();
这就是ClassCastException
如果presenter.usernameError()
是Unit
- 类型(或Java中的void
)函数的原因。我想这不是你想要的。
如果presenter.usernameError()
和presenter.passwordError()
都是Unit
类型的函数,您可以
val username = username.text.toString().trim().takeUnless { it.isNullOrEmpty() } ?: return presenter.usernameError()
val password = password.text.toString().trim().takeUnless { it.isNullOrEmpty() } ?: return presenter.passwordError()
presenter.signInWithUsernameAndPassword(username as String,password as String)
it
是指username.text.toString().trim()
或password.text.toString().trim()
,它们是调用takeUnless
方法的实例。