我正在学习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() {
}
}
所以我的问题是,请问我是否理解正确? 如果是,为什么会这样,因为如果参数数量较少,访问组件函数非常容易。
谢谢:)
答案 0 :(得分:1)
由于android studio,这是一个有趣的错误。我不知道如何形容。但是,当我使用var并最初按alt + tab时,列表中的component()函数不会提供任何选项。然后,我用“ comp”过滤它,仅显示两个选项,例如copy()和哈希码,但仍然没有组件选项,只有当我写了整个单词“ component”时,它才会删除所有较早的选项并仅显示component ()选项,而不是较早的选项。当我使用val :) :) :)
时,情况并非如此答案 1 :(得分:0)
以下应该可以工作:
fun main(args: Array<String>) {
var pair = Pair("hi", "there")
//val pair = Pair("hi", "there") // is the same
val (hi , _) = pair
println(hi + " " + pair.component2())
}
在var或val中存储应该没有区别。也许缺少某些内容,您省略了自定义数据类,也许其中有错误。