【问题标题】:handle a object that can return null in kotlin在 kotlin 中处理可以返回 null 的对象
【发布时间】:2017-08-14 16:01:03
【问题描述】:
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 版本中用户是否恰好为空。我是否需要一个 if 条件来检查用户是否为空?

我可以将功能作为一条线

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

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

非常感谢您的任何建议

【问题讨论】:

    标签: kotlin kotlin-null-safety


    【解决方案1】:

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

    根据 Firebase 的文档:

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

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

    因此,这取决于您在没有登录用户时要如何处理。

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

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

    如果currentUser 为null 或currentUser?.email 为null,它将返回null。


    编辑:如果您只是想返回电子邮件(如果存在)。写成一行就可以了,safe calls可以被链化。

    【讨论】:

      【解决方案2】:

      小建议。如果您确定 object 不应该为 null,但可以为 null,请使用 !! 将 object 标记为不应为 null 的对象。如果应用程序崩溃也没关系,因为它向您表明您在某个地方执行了错误的操作。查看您的实现结构以了解对象是否应该为空,许多开发人员过度使用objet?.let 而没有查看该对象是否应该为空

      【讨论】:

        【解决方案3】:

        我只是想知道在我的 kotlin 版本中,如果用户恰好是 无效的。我是否需要有一个 if 条件来检查用户是否是 空?

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

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

        【讨论】:

          猜你喜欢
          • 2012-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-13
          相关资源
          最近更新 更多