从kotlin的乐趣中返回null

我写了一个函数来执行数据库查询。 如果它不能获取任何结果,我希望它返回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

谁能告诉我如何解决这个问题?

只需指定您的返回类型为ServiceChargeMasterList? 并返回null!! 操作员使用起来非常难看。

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

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

用这个

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

说明

在Kotlin,有可选的类型 。 如果你返回ServiceChargeMasterList,你说对编译器你永远不会返回null。 如果你想返回null,你必须添加? 在表示可以返回ServiceChargeMasterList实例的类型末尾签名或为空。

操作员! 可以在Java中解释为

 //Kotlin variable!! //Java if (variable == null) throw new kotlin.NullPointerException(); 

您的方法返回类型不允许返回null 。 您需要将其更改为ServiceChargeMasterList? ,那么编译器就可以为null了。

!! 是一个运算符,它只能在非常罕见的情况下成为高效代码的一部分,因为通过使用它,你告诉编译器:

我不希望Kotlin在我的代码中关心可空性问题,我喜欢在运行时看到NullpointerException

它可以用来访问可空类型,而不必像nullableVar?.foo()那样应用安全的运算符,然后可以按如下方式完成: nullableVar!!foo()

在你的情况下,虽然!! 操作员没有意义,也不能解决问题。 如果您的方法真的应该返回null ,请更改返回类型。