2017-09-07 2 views
4

私はデータベースクエリを実行する関数を書いています。結果を取得できない場合はnullを返します。null from kotlin

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を与えます。

誰も私にこの問題を解決する方法を教えてもらえますか?

答えて

8

返品タイプをServiceChargeMasterList?と指定して返品nullと返すだけです。 !!オペレータは、使用するのが非常に醜いです。

unique()メソッドが返され、オプション(またはJavaオブジェクト)の場合は、ifステートメントを使用する必要はありません。その場合は、あなたの方法は、次のようになります。

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

使用この

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

説明Kotlinで

オプションの種類があります。 ServiceChargeMasterListを返すと、nullを返すことは決してないことをコンパイラに伝えます。 nullを返す場合は、追加する必要がありますか? ServiceChargeMasterListまたはnullのインスタンスを返すことができることを示す型の最後に署名します。

演算子! nullを返すことはできません

//Kotlin 
variable!! 


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

あなたのメソッドの戻り値の型として、Javaで説明することができます。 ServiceChargeMasterList?に変更する必要があります。nullは、コンパイラにとっては問題ありません。

それを使用することによって、あなたがコンパイラを言っているので、!!は私見、ごくまれに生産的なコードの一部である必要があり、オペレータである:

「私はKotlinが取るにしたくありません私のコードでの空白問題のケア。私は実行時にNullpointerExceptionを見るのが好きです。 " nullableVar!!foo()は:

次のように行うことができますnullableVar?.foo()、中のような安全な演算子を適用することなく、NULL可能なタイプにアクセスするために使用することができます。

あなたのケースでは、!!演算子は意味をなさないため、問題は解決しません。あなたのメソッドが本当にnullを返すと思われる場合は、戻り値の型を変更してください。

関連する問題