伴随对象中的val arrayListOf()返回无效值

时间:2020-03-16 15:34:21

标签: android kotlin

我有代码:

class DrawerViewModel : ViewModel() {

    fun updateDrawerProfiles() {
        val example = DrawerUtils.exampleProfile
        example.add(  DrawerAccount(3, "NEW Test") )
        setDrawerProfiles(example)
    }

}
class DrawerUtils {

    companion object {

        val exampleProfile = arrayListOf(
            DrawerAccount(1, "Facebook"),
            DrawerAccount(2, "Google")
        )

    }
}

[运行示例代码](https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS4zLjYxIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsImpzQ29kZSI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiXG5cbmZ1biBtYWluKGFyZ3M6IEFycmF5PFN0cmluZz4pIHtcbiAgICBwcmludGxuKERyYXdlclZpZXdNb2RlbCgpLnVwZGF0ZURyYXdlclByb2ZpbGVzKCkuc2l6ZSApXG4gICAgcHJpbnRsbihEcmF3ZXJWaWV3TW9kZWwoKS51cGRhdGVEcmF3ZXJQcm9maWxlcygpLnNpemUgKVxuICAgIHByaW50bG4oRHJhd2VyVmlld01vZGVsKCkudXBkYXRlRHJhd2VyUHJvZmlsZXMoKS5zaXplIClcbn1cblxuY2xhc3MgRHJhd2VyVmlld01vZGVsKCkge1xuXG4gICAgZnVuIHVwZGF0ZURyYXdlclByb2ZpbGVzKCkgOiBBcnJheUxpc3Q8RHJhd2VyQWNjb3VudD4ge1xuICAgICAgICB2YWwgZXhhbXBsZSA9IERyYXdlclV0aWxzLmV4YW1wbGVQcm9maWxlXG4gICAgICAgIGV4YW1wbGUuYWRkKCAgRHJhd2VyQWNjb3VudCgzLCBcIk5FVyBUZXN0XCIpIClcbiAgICAgICAgcmV0dXJuIGV4YW1wbGVcbiAgICB9XG5cbn1cblxuY2xhc3MgRHJhd2VyVXRpbHMge1xuICAgXG4gICAgY29tcGFuaW9uIG9iamVjdCB7XG5cbiAgICAgICAgdmFsIGV4YW1wbGVQcm9maWxlID0gYXJyYXlMaXN0T2YoXG4gICAgICAgICAgICBEcmF3ZXJBY2NvdW50KDEsIFwiRmFjZWJvb2tcIiksXG4gICAgICAgICAgICBEcmF3ZXJBY2NvdW50KDIsIFwiR29vZ2xlXCIpXG4gICAgICAgIClcbiAgICAgIFxuICAgIH1cbn1cbmRhdGEgY2xhc3MgRHJhd2VyQWNjb3VudCh2YXIgaWQ6IEludCwgdmFyIG5hbWU6IFN0cmluZyApXG5cbiJ9

当我运行几次时,函数updateDrawerProfiles返回列表的有效大小。 运行x3 updateDrawerProfiles ()|输出: 3 4 5

应该是 3 3 3。

当我移动功能updateDrawerProfiles超出伴侣对象时-可以。 为什么会这样?

1 个答案:

答案 0 :(得分:2)

应该是3 3 3。

错。

DrawerUtils同伴是一个单例。创建一次,该对象保持存在。您要向exampleProfile添加3次新值,因此将大小增大为3,然后是4,然后是5,是有意义的。

请对此主题https://kotlinlang.org/docs/tutorials/kotlin-for-py/objects-and-companion-objects.html

进行一些阅读