首页 > 解决方案 > 为什么只有 val 类型的对象在 kotlin 中才有组件函数?

问题描述

我正在为 Android 学习 Kotlin。我正在使用数据类。我正在尝试使用数据类的组件功能。我观察到的是,只有当变量的类型为“val”并且我没有为“var”获取它们时,我才获得变量的组件函数

  var customObj: CustomObj = CustomObj("Henlo", 5)
    mlist.add(customObj)
    for ((i, v) in mlist.withIndex()) {
        //print("In loop")
       // customObj.
        if(mlist.get(i) is CustomObj)
        println(mlist.get(i))
    }

对于上述对象 customObj,我无法访问组件功能。

如果我将其更改为

  val customObj: CustomObj = CustomObj("Henlo", 5)
    mlist.add(customObj)
    for ((i, v) in mlist.withIndex()) {
        //print("In loop")
       // customObj.
        if(mlist.get(i) is CustomObj)
        println(mlist.get(i))
    }

我可以访问组件功能。

编辑:我正在发布完整的活动课程

class MainActivity : AppCompatActivity() {
    var mlist = mutableListOf<Any>()
    var mlistNew = mutableListOf<String>()
    //var i = Int
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        /*  val numbers: IntArray = intArrayOf(1, 2, 3, 4, 5)
          println("Hey!! I am array Example" + numbers[2])*/
        mlist.add("this")
        mlist.add("is")
        mlist.add("my")
        mlist.add("first")
        mlist.add("kotlin")
        mlist.add("sample")
        mlist.add(1)
        mlist.add(2)
        mlist.add(3)
        mlist.add(4)
        mlist.add(5)
        mlist.add(CustomObj("my", 2))
        val customObj: CustomObj = CustomObj("Henlo", 5)
        mlist.add(customObj)
        for ((i, v) in mlist.withIndex()) {
            //print("In loop")
           // customObj.i
            if(mlist.get(i) is CustomObj)
            println(customObj.i)
        }
        //   mlist.get(0)
        for ((index, value) in mlistNew.withIndex()) {
            //   mlistNew.get(index)
        }
        mlistNew.add("one")
        mlistNew.add("two")

        // mlistNew.get(0)
    }

    private data class CustomObj(var i: String, var j: Int) : Any() {


    }
}

所以我的问题是请让我知道我的理解是否正确?如果是,为什么会这样,因为如果参数数量较少,访问组件功能非常容易。

谢谢 :)

标签: androidkotlin

解决方案


由于android studio,这是一个有趣的错误。我不知道如何描述它。但是当我使用 var 并最初按 alt+tab 时,它不会在列表中为 component() 函数提供任何选项。然后我用“comp”过滤它,它的统计信息只显示 2 个选项,如 copy() 和哈希码,但仍然没有组件选项,只有当我写下整个单词“组件”时,它才会删除所有早期选项并只显示组件() 选项,但不是较早的选项。当我使用 val 时,情况并非如此 :) :) :)


推荐阅读