科特林!操作员用法使代码尚不清楚



我正在编写Kotlin应用程序,我一直在研究此语言,我注意到要创建一个变量,您必须明确定义它是否可以为null,然后您使用 ?操作员。

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

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

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个或更多的变量。有没有一种方法可以简化代码或这种语言的性质?

考虑使用延迟定义的属性。它们用于您的用例。

private lateinit var fragment: TurboFragment

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

print(fragment)  // UninitializedPropertyAccessException is thrown

相关内容

  • 没有找到相关文章

最新更新