从 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的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin初级- - - 基础函数.md

kotlin基础语法

Kotlin函数篇

Kotlin总结

Kotlin---------------函数之fun?function?

第二章(Kotlin基础)