使用null数组,而不是可选数组

问题描述 投票:1回答:1

我想知道为什么数组大小为1的null而不是可选的:

https://github.com/android/architecture-components-samples/blob/master/GithubBrowserSample/app/src/test-common/java/com/android/example/github/util/LiveDataTestUtil.kt#L27

原始代码:

    @Throws(InterruptedException::class)
    fun <T> getValue(liveData: LiveData<T>): T {
        val data = arrayOfNulls<Any>(1)
        val latch = CountDownLatch(1)
        val observer = object : Observer<T> {
            override fun onChanged(o: T?) {
                data[0] = o
                latch.countDown()
                liveData.removeObserver(this)
            }
        }
        liveData.observeForever(observer)
        latch.await(2, TimeUnit.SECONDS)

        return data[0] as T
    }

为什么不使用:

 @Throws(InterruptedException::class)
    fun <T> getValue(liveData: LiveData<T>): T {
        var data: T? = null
        val latch = CountDownLatch(1)
        val observer = object : Observer<T> {
            override fun onChanged(o: T?) {
                data = o
                latch.countDown()
                liveData.removeObserver(this)
            }
        }
        liveData.observeForever(observer)
        latch.await(2, TimeUnit.SECONDS)

        return data!!
    }

使用数组比在那里的可选对象好吗?为什么?还是一样?

谢谢

android kotlin android-architecture-components
1个回答
2
投票

[查看项目history,该文件以前是Java,但直接转换为Kotlin-原始Java版本是here,您可以看到他们只是将其直接转换为Kotlin。

尽管您提供的版本在Kotlin中更有意义,但Java中没有这种功能,因为您在匿名类或lambda中使用的局部变量必须是最终的。这就是为什么使用单个元素数组的原因。但是,如果他们最初是在Kotlin中编写的(或者如果要对其进行重构),则几乎可以肯定会按照您的方式进行。

© www.soinside.com 2019 - 2024. All rights reserved.