And*_*lli 4 null android kotlin kotlin-null-safety
我正在写一个Kotlin应用程序,我一直在研究这种语言,我注意到要创建一个变量,你必须明确定义它是否为null然后你使用?运营商.
现在,我的问题.有时我必须定义一个全局变量(在这种情况下是一个片段),所以我需要将它设为null,因为我还不能初始化它
在java中我没有这个问题,因为在声明它之后我做的第一件事是在onCreate()中初始化像这样
TurboFragment fragment = null;
@Override
public void onCreate(Bundle savedInstanceState) {
...
fragment = adapter.getCurrentFragment();
}
Run Code Online (Sandbox Code Playgroud)
然后我可以在没有语法问题的情况下使用它在Kotlin中是不同的,因为我必须这样做
private var fragment: TurboFragment? = null
override fun onCreate(savedInstanceState: Bundle?) {
...
fragment = adapter!!.currentFragment
fragment!!.foo()
var x = fragment!!.sampleInt
}
Run Code Online (Sandbox Code Playgroud)
现在,每次我调用片段的实例时我都必须使用null-safe !! 运营商.这使我的代码变得混乱,因为对于每一行,我至少有一个!运算符,它看起来真的不清楚它是否如此频繁,特别是如果你有5个或更多这样的变量.有没有办法简化代码或这种语言的性质是这样的?
考虑使用延迟初始化的属性.它们适用于您的用例.
private lateinit var fragment: TurboFragment
Run Code Online (Sandbox Code Playgroud)
但是,您应该记住,lateinit在初始化之前访问属性会引发异常.这意味着只有在您完全确定时才会使用它们,它们将被初始化.
print(fragment) // UninitializedPropertyAccessException is thrown
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |