当前位置: 首页 > 知识库问答 >
问题:

静态编程语言List和MutableList:两个不同的引用,指向同一个集合对象

弘烨烁
2023-03-14

你能举一个例子吗?

使用集合接口时要记住的一件关键事情是只读集合不一定是不可变的。如果您使用的变量具有只读接口类型,这可能只是对同一集合的众多引用之一。其他引用可以具有可变接口类型

我想编写一个函数,在创建val-someCollection:List的同时,将元素添加到某个集合中

实例

fun addEl(numbers:MutableList<Int>):List<Int>{
    for (i in 1..10){
        numbers.add(i)
    }
    return numbers.toList()
}

fun main(args: Array<String>){
    var readOnlyNumbers: List<Int> = emptyList()
    readOnlyNumbers = addEl(readOnlyNumbers.toMutableList())
    println(readOnlyNumbers.size)
}

我可以避免使用var和重新确定readOnlyNumbers吗?

共有2个答案

万俟穆冉
2023-03-14

要回答这部分:

你能举一个例子吗?

使用集合接口时要记住的一件关键事情是只读集合不一定是不可变的。如果您使用的变量具有只读接口类型,这可能只是对同一集合的众多引用之一。其他引用可以具有可变接口类型

这只是在谈论这样的情况:

val mutableList: MutableList<Int> = mutableListOf<Int>()
val list: List<Int> = mutableList
println(list) // []
mutableList.add(0)
println(list) // [0]

即使列表具有类型

请注意,这是一个例子

我想编写一个函数,将元素添加到某个集合中,同时创建一个val someCollection:List

同样,但我不建议编写此代码;使用JB Nizet的一个版本。

凌成天
2023-03-14

以下是在不使用var的情况下重写代码的各种方法

fun addEl(numbers:MutableList<Int>):List<Int>{
    for (i in 1..10) {
        numbers.add(i)
    }
    return numbers.toList()
}

fun main(args: Array<String>){
    val readOnlyNumbers: List<Int> = addEl(mutableListOf())
    println(readOnlyNumbers.size)
}

或者只是

fun createEl(): List<Int> {
    return (1..10).toList()
}

fun main(args: Array<String>){
    val readOnlyNumbers = createEl()
    println(readOnlyNumbers.size)
}
 类似资料:
  • 当两个线程同时调用相同的静态方法时会发生什么?例如: 第一个线程现在调用someMethod()。第二个线程从现在起0.5秒后调用someMethod()(第一个线程仍在处理数据)。 我知道someMethod()可以同步。但如果它不同步,会发生什么呢?

  • 我想为我的游戏创建一个简单的倒计时,当游戏开始时,我想每秒调用这个函数: 我试过这个: 但应用程序不幸停止,第二次调用run函数 3周前,我刚刚开始使用android开发和静态编程语言,到目前为止,我对它了解最多。 在Xcode中使用swift时,我使用了这一行,我认为类似的东西也适用于Kotlin

  • 正如标题所说,我正在尝试将Java和Kotlin混合在一个项目中。这里有一个很好的例子。混合java kotlin hello world。除了kotlin在src/main/Java/somepackage/SomeClass中找不到我的任何Java类之外,所有的东西都正常工作。Java语言 这是什么原因? 我的身材。gradle看起来像这样 而不是开始尝试在更大的项目上实现这一点。我试图通过创

  • 我有两个单选组(组1和组2),分别包含3个单选按钮。我用这个准则把左右两列分开,各占一半。由于两个无线组是分开的,当用户单击组1时,我希望清除组2中的选定项(如果有)。任何想法都可以做到,因为我是由Kotlin编写的,所以我在stackoverflow ConstraintLayout、RadioGroup和RadioButton RadioGroup的两列中找到了一些示例,其中两列有十个单选按钮

  • 问题内容: 假设我有两个类CLassA和CLassB。它们有一个共同的属性,例如每个类拥有的元素数量。 我如何从ClassA和CLassB的对象创建一个集合,并按该属性排序(降序升序无所谓)? 我收集了一个类型,但是当我尝试实现Comparable Interface时,我无法使用该方法(例如,获取返回元素nr的get)。 我有什么解决方案? 谢谢你的帮助! 问题答案: 实际上,如果要将它们放在同

  • 我正在尝试使用自定义注释验证RequestBody。 使用下面的配置,我的验证工作正常: 但是当我试图这样总结注释时: 它不起作用。我做错了什么?