Kotlin !!操作员使用使代码不清晰

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin !!操作员使用使代码不清晰相关的知识,希望对你有一定的参考价值。

我正在写一个Kotlin应用程序,我一直在研究这种语言,我注意到要创建一个变量,你必须明确定义它是否为null然后你使用?运营商。

现在,我的问题。有时我必须定义一个全局变量(在这种情况下是一个片段),所以我需要将它设为null,因为我还不能初始化它

在java中我没有这个问题,因为在声明它之后我做的第一件事是在onCreate()中初始化,就像这样

TurboFragment fragment = null;

@Override
public void onCreate(Bundle savedInstanceState) {

    ...

    fragment = adapter.getCurrentFragment();
}

然后我可以在没有语法问题的情况下使用它在Kotlin中是不同的,因为我必须这样做

private var fragment: TurboFragment? = null

override fun onCreate(savedInstanceState: Bundle?) {

    ...

    fragment = adapter!!.currentFragment
    fragment!!.foo()
    var x = fragment!!.sampleInt
}

现在,每次我调用片段的实例时我都必须使用null-safe !!运营商。这使我的代码变得混乱,因为对于每一行,我至少有一个!运算符,它看起来真的不清楚它是否如此频繁,特别是如果你有5个或更多这样的变量。有没有办法简化代码或这种语言的性质是这样的?

答案

考虑使用Late-Initialized Properties。它们适用于您的用例。

private lateinit var fragment: TurboFragment

但是,您应该记住,在初始化之前访问lateinit属性会引发异常。这意味着只有在您完全确定时才会使用它们,它们将被初始化。

print(fragment)  // UninitializedPropertyAccessException is thrown

以上是关于Kotlin !!操作员使用使代码不清晰的主要内容,如果未能解决你的问题,请参考以下文章

使用 Kotlin 更改片段中的按钮背景

如何从片段 KOTLIN 中调用意图 [重复]

如何更改片段 Kotlin

将接口从片段传递到kotlin中的活动

如何在kotlin的片段内显示网格视图?

Android 上的 Kotlin:如何在片段中使用数据库中的 LiveData?