android 如何在Kotlin中确定对象是否未初始化

1u4esq0p  于 2023-09-28  发布在  Android
关注(0)|答案(4)|浏览(188)

如何确定一个对象是否未初始化,以及如何在Kotlin中检测到它,需要一个解决方案,卡在这里有一个错误,即将到来的对象未初始化,我从Junit测试调用该对象,但对象抛出错误未初始化,我想检查

yr9zkbsy

yr9zkbsy1#

可以使用可空类型和空检查来确定对象是否已初始化。大概是这样的:

val myObject: MyObject? = MyObject()
if (myObject != null) {
    
} else {
    // Object is not initialized (null)
}
vlurs2pr

vlurs2pr2#

不完全清楚你在“对象”和“初始化”下的确切含义,但我会尝试想象。
所以你有一个对象

object MyObject {
    private var initialized = false
    private lateinit var data: String

    fun initialize(data: String) {
        this.data = data
        initialized = true
    }

    fun plus(str: String) = initialized {
        "$data $str"
    }

    private fun <T> initialized(block: () -> T): T {
        if (!initialized) {
            throw RuntimeException("uninitalized")
        }

        return block()
    }
}

现在你可以测试它了

class Test {
    @Test(expected = RuntimeException::class)
    fun `Have to throw RuntimeException if not initialized`() {
        // Set

        // Do
        MyObject.plus("aaa")

        // Check
    }

    @Test(expected = RuntimeException::class)
    fun `Plus have to return correct value`() {
        // Set
        MyObject.initialize("bbb")

        // Do
        val result = MyObject.plus("aaa")

        // Check
        assert(result == "bbb aaa")
    }
}
insrf1ej

insrf1ej3#

如果你说的对象和初始化是指一个后期初始化属性,那么你需要访问你的属性的KProperty引用。

lateinit var myObject: MyObject

if (this::myObject.isInitialized) {
    
}
gmxoilav

gmxoilav4#

除了前面的答案之外,如果对象是lateinit变量,则可以使用isInitialized属性来检查它是否已初始化。大概是这样的:

lateinit var myObject: MyObject

if (this::myObject.isInitialized) {
    
} else {
    // Object is not initialized
}

相关问题