Tag: 科特林

为什么需要代码B在输入参数中使用SQLiteDatabase。()?

代码A很好,为了简​​单起见,有人写了代码B. 我不明白为什么在代码B中的参数应该是(transactionFun:SQLiteDatabase.()->Unit) 我认为CodeF中的(transactionFun: ()->Unit)也不错,对不对? 代码A fun excuteTransaction(transactionFun:()->Unit){ val db = dbHelper.writableDatabase try{ db.beginTransaction() transactionFun() db.setTransactionSuccessful() }finally { db.endTransaction() } } 代码B fun SQLiteDatabase.executeTransaction(transactionFun:SQLiteDatabase.()->Unit){ try{ beginTransaction() transactionFun() setTransactionSuccessful() }finally { endTransaction() } }

期待会员减免

我想在构造函数中分配我的类variables,但我得到一个期待成员声明的错误 class YLAService { var context:Context?=null class YLAService constructor(context: Context) { this.context=context;// do something }}

从控制台循环字符串和总和奇数

fun main(args: Array) { println(“Number: “) val num = readLine()!!.toInt() var sum = 0 for (digit in num) { if (digit % 2 != 0) { sum += digit } } println(“$sum”) } 我需要这个循环遍历数字中的每一个数字,并将所有奇数的数字相加。 它给了我一个错误的数字“For循环范围必须有一个’iterator()’方法”

如何使用Kotlin设置OnEditorActionListener

所以我有这个Java代码: editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { doSomething(); return true; } return false; } }); 我已经设法得到这(我甚至不知道这是正确的方式): editText.setOnEditorActionListener() { v, actionId, event -> if(actionId == EditorInfo.IME_ACTION_DONE){ doSomething() } else { } } 但我得到一个错误Error:(26, 8) Type mismatch: inferred type is kotlin.Unit but kotlin.Boolean was expected […]

正则expression式匹配字符串

我想通过正则expression式提取两个数字“[0-9] +” var str = “ABcDEFG12345DiFKGLSG938SDsFSd” 我想提取的是“12345”和“938”。 但我不知道如何在Kotlin这样做。

如何访问Java中的Kotlin伴侣对象?

我把我的一个Java类转换成Kotlin和类如下。 class MainApplication : Application() { companion object { operator fun get(context: Context): MainApplication { return context.applicationContext as MainApplication } } } 它有一个静态函数get 。 我仍然有一个Java函数访问它。 MainApplication application = MainApplication.get(mContext); MainApplication在Java中是很好的。 但是当MainApplication在Kotlin时,上面的代码错误 Error:(27, 54) error: cannot find symbol method get(Context) 我怎样才能访问我的Java代码上面?

为什么我不能在typealias上使用@PublishedApi?

在我目前的项目中,我有一个针对不同types查询的公共接口 interface Query 以及该接口的内部实现。 由于我有公共内联函数来创建不同的查询,我需要在@PublishedApi上使用@PublishedApi @PublishedApi internal class QueryImpl : Query 现在为了方便,我想为不同types的查询定义一些types别名。 typealias MatchQuery = Query 这对公共接口非常有效,但我需要在公共内联函数中创建一个实例 inline fun match(init: MatchQuery.() -> Unit) { // It would look nicer if I could use MatchQueryImpl().init() QueryImpl().init() } 但是不必为每种查询都写QueryImpl ,我想为实现使用内部的typealias。 // fails because it needs to be internal typealias MatchQueryImpl = QueryImpl // can’t be used in […]

有没有更好的方法来访问可空属性?

将sound.id属性从可空或不可通过的方式转换为play方法的参数,最好的办法是什么? class Sound() { var id: Int? = null } val sound = Sound() … //smarcat imposible becouse ‘sound.id’ is mutable property that //could have changed by this time if(sound.id != null) soundPool.play(sound.id, 1F, 1F, 1, 0, 1F) //smarcat imposible becouse ‘sound.id’ is mutable property that //could have changed by this time sound.id?.let { soundPool.play(sound.id, […]

Kotlin是否具有身份识别function?

Scala在Predef中有一个通用的identity函数: def identity[A](x: A): A Kotlin在标准库中有类似的function吗? 当然,我可以直接使用{ it } ,但是我发现identity更易于阅读,并且实例化所有这些lambdaexpression式有点浪费。 对于任何types的Foo ,我必须能够在函数(Foo) -> Foo所在的地方使用这个identity函数。 在Kotlin的types系统中,这样的function甚至是可能的吗? (在斯卡拉的情况下,有一个隐式的转换,将函数对象内部的方法封装起来)

输入名称作为值?

有人可以指点我解释以下内容的文件吗? 特别是,我想知道为什么可以使用String和Int ,如图所示。 val a: Unit = { _:Any -> String }(Int) 最初,我写了这个: val a: Unit = { x:Any -> x.toString() }(Unit) 在这两种情况下,我都找不到合适的文档。