从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
,请更改返回类型。