从 kotlin 中的 fun 返回 null
Posted
技术标签:
【中文标题】从 kotlin 中的 fun 返回 null【英文标题】:Return null from fun in kotlin 【发布时间】: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
。
谁能告诉我如何解决这个问题?
【问题讨论】:
【参考方案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它工作
【讨论】:
以上是关于从 kotlin 中的 fun 返回 null的主要内容,如果未能解决你的问题,请参考以下文章