在kotlin中从null中返回null

Sun*_*iya 6 android nullpointerexception kotlin

我编写了一个执行数据库查询的函数.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!!
}
Run Code Online (Sandbox Code Playgroud)

它给了我kotlin.KotlinNullPointerException.

谁能告诉我怎么解决这个问题?

Mar*_*eng 10

只需将您的退货类型指定为ServiceChargeMasterList?并返回即可null.该!!运营商是非常难看使用.

if如果unique()方法返回并且是可选的(或Java对象),则甚至不必使用该语句.在这种情况下,您的方法可能如下所示:

fun getServiceCharge(model: String): ServiceChargeMasterList? {
    return VideoconApplication.daoSession.serviceChargeMasterListDao.queryBuilder().where(ServiceChargeMasterListDao.Properties.ModelCategory.eq(model)).unique()
}
Run Code Online (Sandbox Code Playgroud)


小智 6

用这个

fun getServiceCharge(model: String): ServiceChargeMasterList? = 
    VideoconApplication.
    daoSession.
    serviceChargeMasterListDao.
    queryBuilder().
    where(ServiceChargeMasterListDao.Properties.ModelCategory.eq(model)).
    unique()
Run Code Online (Sandbox Code Playgroud)

说明

在Kotlin中,有可选类型.如果返回ServiceChargeMasterList,则告诉编译器您永远不会返回null.如果要返回null,则必须添加?在类型的末尾签名,表示您可以返回ServiceChargeMasterList的实例或null.

运营商 !!可以用Java解释

//Kotlin
variable!!


//Java
if (variable == null)
    throw new kotlin.NullPointerException();
Run Code Online (Sandbox Code Playgroud)