android - 为什么只有 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() {
}
}
所以我的问题是请让我知道我的理解是否正确?如果是,为什么会这样,因为如果参数数量较少,访问组件功能非常容易。
谢谢 :)
解决方案
由于android studio,这是一个有趣的错误。我不知道如何描述它。但是当我使用 var 并最初按 alt+tab 时,它不会在列表中为 component() 函数提供任何选项。然后我用“comp”过滤它,它的统计信息只显示 2 个选项,如 copy() 和哈希码,但仍然没有组件选项,只有当我写下整个单词“组件”时,它才会删除所有早期选项并只显示组件() 选项,但不是较早的选项。当我使用 val 时,情况并非如此 :) :) :)
推荐阅读
- android - 找不到 Gradle DSL 方法:'setApplicationId()'
- android - Android使用的c代码的open部分出现错误
- angular - 用于在角度 5 中延迟加载组件的结构指令
- c# - 如何将自定义属性添加到依赖项跟踪?
- php - 如何在laravel中合并一个数组元素?
- javascript - 如何将特定插件加载到 WordPress 中的 ajax 处理程序?
- c# - Angular中一个请求和多个请求的性能差异
- python - QObject 实例化上的 PySide 分段错误
- c# - Roslyn-查找未使用的变量
- ios - 在 ios 中关闭 sqlite db 时出错