【问题标题】:Return null from fun in kotlin从 kotlin 中的 fun 返回 null
【发布时间】:2018-02-16 08:09:49
【问题描述】:
我编写了一个函数来执行数据库查询。如果它无法获取任何结果,我希望它返回 null。
fun getServiceCharge(model: String): ServiceChargeMasterList {
val unique = VideoconApplication.daoSession.serviceChargeMasterListDao.queryBuilder().where(ServiceChargeMasterListDao.Properties.ModelCategory.eq(model)).unique()
if (unique != null)
return unique
else
return null!!
}
它给了我kotlin.KotlinNullPointerException。
谁能告诉我如何解决这个问题?
【问题讨论】:
标签:
android
nullpointerexception
kotlin
【解决方案1】:
只需将您的返回类型指定为ServiceChargeMasterList? 并返回null。 !! 操作符很难用。
如果您的 unique() 方法返回和可选(或 Java 对象),您甚至不必使用该 if 语句。在这种情况下,您的方法可能如下所示:
fun getServiceCharge(model: String): ServiceChargeMasterList? {
return VideoconApplication.daoSession.serviceChargeMasterListDao.queryBuilder().where(ServiceChargeMasterListDao.Properties.ModelCategory.eq(model)).unique()
}
【解决方案2】:
使用这个
fun getServiceCharge(model: String): ServiceChargeMasterList? =
VideoconApplication.
daoSession.
serviceChargeMasterListDao.
queryBuilder().
where(ServiceChargeMasterListDao.Properties.ModelCategory.eq(model)).
unique()
说明
在 Kotlin 中,有 可选类型。如果你返回 ServiceChargeMasterList,你就告诉编译器你永远不会返回 null。如果要返回 null,则必须添加 ?类型末尾的符号表示可以返回 ServiceChargeMasterList 的实例或 null。
运营商!!在Java中可以解释为
//Kotlin
variable!!
//Java
if (variable == null)
throw new kotlin.NullPointerException();
【解决方案3】:
您的方法的返回类型不允许返回null。您需要将其更改为可空版本ServiceChargeMasterList?(可空性由问号表示)。
非空断言运算符!! 只应在极少数情况下使用,因为它会尝试将可空类型转换为不可空类型并且可能会抛出NullPointerException 在@ 上调用时987654325@。
您的代码null!! 就是对此的完美演示。
不是像nullableVar?.foo() 那样应用安全运算符,而是像这样使用这个运算符:nullableVar!!.foo()。
但在您的情况下,!! 运算符是错误的选择。如果您的方法确实应该返回 null,请更改返回类型。
【解决方案4】:
open fun getProfile() : ProfileModel? {
if (MyApplication.sharedPreference.getString("profile","")!=null){
var profileModel : ProfileModel = Profile()
return profileModel
}
return null
}
添加 ?在你的返回类型之后然后return null它工作