Tag: 科特林

具有回报价值的Kotlin协同程序

我想创建一个具有返回值的协程方法。 例如) fun funA() = async(CommonPool) { return 1 } fun funB() = async(CommonPool) { return 2 } fun sum() { launch { val total = funA().await() + funB().await() } } 如果我想要返回总和方法,我该怎么办? 喜欢, fun sum(): Int { launch { val total = funA().await() + funB().await() } return total }

合格它在kotlin

正如https://kotlinlang.org/docs/reference/this-expressions.html#qualified中的文档所述,可以使用合格的来指定要使用的外部上下文。 有没有什么办法it ? IntelliJ一直在说有一个sytax错误。

在导入中转义保留字

在Kotlin中使用Java类时,有时会使用kotlin中保留字的标识符。 java interop文档说你可以使用反引号(`)字符,但是这在导入中不起作用。 那么如何逃避保留字的导入。 例如tinkerpop库有一个名为’__’的类,但是这是一个Kotlin保留,所以如果我像下面导入它会给出一个错误。 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__ 我可以使用这样的通配符导入它: import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.* 但是因为我只使用一个类,所以Intellij的代码格式化程序将其替换为导致错误的以前版本的导入。 (我猜这也是intellij格式化程序中的一个bug) 对于建议使用反向工程的答案。 它不是。 即使在try.kotlinlang.org上也不能编译。 假定一个类定义为 package blah class `__` { } 这是用反引号导入时发生的情况。

在Kotlin的字符串模板中使用下划线(“_”)

在Kotlin中,我试图创建一个动态文件名,其中包含一个types和一个如下所示的日期: var filename = “ab_$type_$date.dat” 但是,variables之间的第二个下划线会导致编译错误: Kotlin:未解决的参考:name_ 我知道我可以用旧的方式连接字符串: var filename = “ab_” + type + “_$date.dat” 但我想知道是否有不同的方式来完成同样的事情。 有没有办法转义字符串模板中的特殊字符或任何其他方式来得到这个工作?

修复一些Kotlin语法

我刚刚用Java构建了一个简单的Android音乐应用程序,然后使用Android Studio的Kotlin插件将这些Java文件转换为Kotlin。 MainActivity.kt中有一些错误 private fun display() { val mySongs = findSong(Environment.getExternalStorageDirectory()) items = arrayOf(mySongs.size.toString()) for (i in mySongs.indices) { items[i] = mySongs[i].name.toString().replace(“.mp3”, “”).replace(“.wav”, “”) } val adp = ArrayAdapter(this, android.R.layout.simple_list_item_1, items!!) listView!!.adapter = adp listView!!.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, position, l -> startActivity(Intent(applicationContext, PlayerActivity::class.java).putExtra(“pos”, position).putExtra(“songs”, mySongs)) } } 这行: items[i] = mySongs[i].name.toString().replace(“.mp3″,””).replace(“.wav”, “”) 显示错误: […]

当Kotlin函数不采用可空types时,正确的方法是什么?

所以我正在解决Koans问题,并通过我过于复杂的解决方案碰到一个困扰我的东西。 我在可空types上使用Int.compareTo()函数。 如果第一个是可空的,这是“容易的”,因为我只写: val a : Int? = 1 val b : Int = 1 a?.compareTo(b) 但是,如果b是可以空的,那么我不能使它工作,也许我错过了什么地方? 那么在这种情况下该怎么办? val a : Int? = 1 val b : Int? = 2 a?.compareTo(b) 我得到一个语法错误说:“下面的函数都不能用提供的参数调用。” 但是,当我介绍这个: val a : Int? = 1 val b : Int? = 2 val x : Int = b ?: 0; o1?.compareTo(x) 它的作品,但它感觉不是这样做的正确方法。 […]

科特林阅读只有属性和无吸气

这些是否相同? val foo = someFooReturningFunction() val foo get() = someFooReturningFunction() 我理解他们的文档的方式,但在我自己的测试中,他们不是。 每次访问属性get() someFooReturningFunction()被评估,没有它只被评估一次。

在Kotlin中满足条件时,最干净的方法来重新分配variables的值

比方说,我有一些方法递减的Longvariables。 我想将其设置为60后减到0.我尝试应用函数 private var tempTime = interval.apply { if (this.equals(0L)) tempTime = interval } 但它甚至不是正确的语法。 tempTime是我的variables,它会减少, interval是我想在tempTime达到0之后设置的默认值。另外,有没有什么办法可以避免这个丑陋的, if equals 0L语句?

Kotlin – 函数的调用操作符重载

我正在学习Kotlin – 运算符重载 我想了解(例如)运算符重载如何为函数的invoke()函数工作 预先测试 Kotlin的扩展函数 fun exampleOfExtensionFunction() { fun Int.randomize(): Int { return Random(this.toLong()).nextInt() } val randomizedFive = 5.randomize() println(“$randomizedFive”) } 打印: -1157408321 在Kotlin中,函数可以用types声明为variables fun exampleOfFunctionType() { val printNumber: (number: Int) -> Unit printNumber = { number -> println(“[$number = ${number.toString(16).toUpperCase()} = ${number.toString(2)}]”) } printNumber(1023) } 打印: [1023 = 3FF = 1111111111] Kotlin允许运算符用扩展和成员函数重载 fun […]

Int和Integer在Kotlin上有什么区别?

我曾尝试在Kotlin中使用Int和Integertypes。虽然我没有看到任何区别。 Kotlin中Int和Integertypes有区别吗?还是它们是一样的?