protected lateinit var mTitle: String
上面mTitle这个变量表示不为null,但是需要延迟初始化,如果在使用这个变量时没有初始化则会抛出异常;
在有些时候我们可能需要判断它有没有初始化,如果没有初始化则需要另外给它赋值,在java中,可以通过if(mTitle != null)来判断,但是在kotlin中,则会弹出下面的提示:
Condition ‘mTitle != null’ is always ‘true’
所以正确的判断方法是:
if (!this::mTitle.isInitialized) {
mTitle = "默认值"
需要注意的是变量前面一定要加上"this::",不然会提示找不到"isInitialized"这个方法
protected lateinit var mTitle: String上面mTitle这个变量表示不为null,但是需要延迟初始化,如果在使用这个变量时没有初始化则会抛出异常;在有些时候我们可能需要判断它有没有初始化,如果没有初始化则需要另外给它赋值,在java中,可以通过if(mTitle != null)来判断,但是在kotlin中,则会弹出下面的提示:Condition ‘mT...
Kotlin设计之初就是不允许非null变量在声明期间不进行初始化的,为了解决这个问题,Kotlin lateinit 允许我们先声明一个变量,然后在程序执行周期的将来某个时候将其初始化,让编译检查时不会 因为属性变量未被初始化而报错。如果未初始化将导致以下异常:
kotlin.UninitializedPropertyAccessException: lateinit property mList has not been initialized
所以我们在 Kotlin 1.2及更高版本上,经常使用基于反射的API 快速检查lateinit属性是否已初始化。
private latei
在 Kotlin 中使用 lateinit 修饰符可以实现对象的延迟初始化,当我们需要使用这个对象又无法确定该对象是否已经被初始化时,可以使用 isInitialized 进行判断。示例如下:
class MyService{
fun performAction(): String = "foo"
class Test{
private lateinit var myService: MyService
fun checkInit(){
// 如果 myService 对象还未初始化,则进
protected lateinit var mVar: String
上面mVar这个变量表示不为null,但是需要延迟初始化,如果在使用这个变量时没有初始化则会抛出异常;
在有些时候我们可能需要判断它有没有初始化,如果没有初始化则需要另外给它赋值,在java中,可以通过if(mVar != null)来判断,但是在kotlin中,则会弹出下面的提示:
Condition ‘mVar != null’ is always ‘true’
二、解决方案
if (!this::mVar.isIni
private var name0: String //报错
private var name1: String = "xiaoming" //不报错
private var name2: String? = null //不报错
复制代码 可是有的时候,我并不想声明一个类型可空的对象,而且我也没办法在对象一声明的时候...
lateinit var lateInitVar: String
fun checkInit() {
if(this::lateInitVar.isInitialized){ //重要,this::前缀是必须的。
//如果已经初始化了,返回true }
```kotlin
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
val isConnected = networkInfo?.isConnected ?: false
首先获取`ConnectivityManager`对象,然后通过`getNetworkInfo`方法获取WiFi的网络信息。最后判断WiFi是否连接,可以使用`isConnected`属性。
The exception was not handled due to missing onError handler in the subscribe() method call
11249