处理一个可以在kotlin中返回null的对象

时间:2017-08-08 15:08:31

标签: kotlin kotlin-null-safety

Android Studio 3.0

我有java代码,我正在为我的项目转换为Kotlin。

public String getAuthUserEmail() {
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        String email = null;
        if (user != null) {
            email = user.getEmail();
        }
        return email;
}

我已将它转换为koklin:

   fun getAuthUserEmail(): String? {
        val user: FirebaseUser? = FirebaseAuth.getInstance().currentUser

        return user?.email
    }

我只想知道我的kotlin版本,如果用户碰巧是null。我是否需要if条件来检查用户是否为空?

我可以将功能作为一行

   fun getAuthUserEmail(): String? {
       return FirebaseAuth.getInstance().currentUser.email?
    }

调用函数是否需要处理可以从函数返回的空字符串?

非常感谢任何建议

3 个答案:

答案 0 :(得分:1)

  

我是否需要if条件来检查用户是否为空?

根据Firebase的文档:

  

返回当前已登录的FirebaseUser,如果没有,则返回null。

     

使用getCurrentUser()!= null检查用户是否已登录。

因此,它取决于您没有登录用户时的处理方式。

如果您希望函数是单行的,可以像这样链接:

fun getAuthUserEmail(): String? {
    return FirebaseAuth.getInstance().currentUser?.email
}

如果currentUser为空或currentUser?.email为空,则返回null。

编辑:如果您只想返回电子邮件(如果存在)。可以将它写在一行中,因为safe calls可以链接。

答案 1 :(得分:1)

小建议。如果您确定对象不应为null,但可以为空,请使用!!将对象标记为不应该为null的对象。如果应用程序崩溃它是可以的,因为它告诉你你做了一些糟糕的实现。看一下你的实现结构,知道wheter对象应该为null,很多开发人员过度使用objet?.let而不查看这个对象是否应为null

答案 2 :(得分:1)

  

如果用户恰好是我的kotlin版本,我只是想知道   空值。我是否需要if条件来检查用户是否   空?

取决于你将如何处理场景,但你可以形成 您的数据采用Elvis Operator方式,如下所示:

fun getAuthUserEmail(): String? {
    return FirebaseAuth.getInstance().currentUser?.email ? "No data"
}