相关疑难解决方法(0)

是否可以在Kotlin中创建扩展构造函数?

在像Swift这样的其他语言中,有可能创建一个添加新构造函数的函数扩展.

像这样的东西:

// base class
class Whatever() {
    ...
}

// constructor method extension
fun Whatever.constructor(potato: String) {
    setPotato(potato)
}

fun main(args: Array<String>) {
    println(Whatever("holi"))
}
Run Code Online (Sandbox Code Playgroud)

在Kotlin有没有办法做到这一点?

kotlin

19
推荐指数
4
解决办法
5291
查看次数

有没有办法在Kotlin中用initializator函数构造HashSet?

要阅读Facebook Hacker Cup 2016 Boomerang Constelations问题中的文件星标,可以定义以下扩展功能:

fun BufferedReader.readStars(n: Int): Set<Star> {
    return Array(n) {
        val (l1, l2) = readLine().split(" ").map { it.toInt() }
        Star(l1, l2)
    }.toHashSet()
}
Run Code Online (Sandbox Code Playgroud)

代码很紧凑,但首先将值读入数组,然后转换为a HashSet.有没有办法在Kotlin中直接初始化a 和sizeizator函数HashSet的大小n

更新:标准Kotlin库中是否存在现有方法?

kotlin

5
推荐指数
2
解决办法
933
查看次数

为什么Kotlin不使用`List(...)`作为列表的工厂和所有抽象集合的类似约定?

在Scala中,有一种方便的约定,即使用伴随对象的apply方法通过伴随对象提供集合工厂方法.所以,如果我想创建一个包含元素1,2和3的列表,我只是使用List(1, 2, 3).该模式在所有集合类型中都是一致的.

在Kotlin,如果我写,List(1, 2, 3)我得到编译错误.要创建包含1,2和3的列表,必须使用listOf(1, 2, 3). List是一个接口,所以它显然没有构造函数.可能有一个伴侣对象,但没有一个.有一个List函数,虽然签名不同于Scala(public inline fun <T> List(size: Int, init: (index: Int) -> T): List<T>)的预期.

那么,为什么Kotlin集合库设计者选择不遵循类似于Scala中的集合工厂的统一约定?

kotlin

3
推荐指数
1
解决办法
258
查看次数

标签 统计

kotlin ×3