Kotlin中Set类型参数函数声明编译报错及setOf使用方法
原代码无法编译的核心问题
- 概念混淆:
setOf()是Kotlin提供的集合实例构造函数,并非可用于参数声明的集合类型,不能直接写在函数参数的类型标注位置。这和你提到的ArrayList场景逻辑完全一致——你不会把arrayListOf()当参数类型写,而是写ArrayList<Int>。 - 泛型漏写:原代码里第三个参数
c: setOf<Int>除了把构造方法当类型用,也没有正确标注泛型参数,双重触发编译报错。
正确的函数签名实现
要接收三个Set类型的整数参数、返回Set类型的整数结果,需要直接引用Kotlin标准库的Set接口作为类型标注,写法如下:
fun twoInThree(a: Set<Int>, b: Set<Int>, c: Set<Int>): Set<Int> { // 在这里补充具体逻辑即可 }
补充说明
- 上述签名可以正常接收所有用
setOf()构造出来的集合实例,和你原本的参数传值逻辑完全兼容。 - 如果你需要在函数内对传入的集合做增删改操作,需要把对应参数的类型替换为
MutableSet<Int>,对应传值时用mutableSetOf()构造实例即可。 - 这套类型和构造方法的对应关系是Kotlin集合框架的通用设计:所有
xxxOf()的顶层函数,都是用来快速生成对应xxx类型接口/实现类的实例,不能反过来当类型声明用。
内容的提问来源于stack exchange,提问作者cluster1
相关产品推荐
相关产品推荐

