2017-09-07 1 views
4

J'ai écrit une fonction pour effectuer une requête de base de données. Je veux qu'il renvoie null s'il ne peut pas obtenir de résultat.Renvoie null de fun dans 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!! 
} 

Il me donne kotlin.KotlinNullPointerException.

Quelqu'un peut-il me dire comment puis-je résoudre ce problème?

Répondre

8

Spécifiez simplement votre type de retour comme ServiceChargeMasterList? et renvoyez null. L'opérateur !! est très moche à utiliser.

Vous n'avez même pas besoin d'utiliser cette instruction if si votre méthode retourne unique() et optionnelle (ou objet Java). Dans ce cas, vous méthode pourrait ressembler à ceci:

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

Utilisez cette

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

Explication

En Kotlin, il y a des types en option. Si vous retournez ServiceChargeMasterList, vous dites au compilateur que vous ne renverrez jamais de null. Si vous voulez retourner null, vous devez ajouter? signe à la fin du type qui indique que vous pouvez renvoyer une instance de ServiceChargeMasterList ou null.

L'opérateur !! peut être expliqué en Java comme

//Kotlin 
variable!! 


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

Votre type de retour de la méthode ne permet pas null à retourner. Vous devez le changer en ServiceChargeMasterList?, puis null est d'accord pour le compilateur.

Le !! est un opérateur qui, à mon humble avis, devrait seulement dans des cas très rares de faire partie du code productif car en l'utilisant vous dire le compilateur:

« Je ne veux pas prendre Kotlin attention aux problèmes de nullité dans mon code, j'aime voir NullpointerException pendant l'exécution ".

Il peut être utilisé pour accéder à des types nullables sans avoir à demander aux opérateurs de sécurité comme dans nullableVar?.foo(), qui peut alors se faire comme suit: nullableVar!!foo().

Dans votre cas, l'opérateur !! n'a pas de sens et ne résout pas le problème. Si votre méthode est vraiment supposée renvoyer null, changez le type de retour.