相关疑难解决方法(0)

什么是Kotlin的"接收器"?

它与扩展功能有什么关系?为什么是with 函数,而不是关键字?

似乎没有关于这个主题的明确文档,只有参考扩展的知识假设.

kotlin

58
推荐指数
6
解决办法
8591
查看次数

在Kotlin中,如何将扩展方法添加到另一个类,但只在某个上下文中可见?

在Kotlin中,我想将扩展方法添加到类中,例如添加到类中Entity.但我只想Entity在交易中看到这些扩展,否则隐藏.例如,如果我定义这些类和扩展:

interface Entity {}

fun Entity.save() {}
fun Entity.delete() {}

class Transaction {
    fun start() {}
    fun commit() {}
    fun rollback() {}
}
Run Code Online (Sandbox Code Playgroud)

我现在可以叫意外save(),并delete()在任何时候,但我只希望他们可以在后start()一交易后不再commit()rollback()?目前我可以这样做,这是错误的:

someEntity.save()       // DO NOT WANT TO ALLOW HERE
val tx = Transaction()
tx.start()
someEntity.save()       // YES, ALLOW
tx.commit()
someEntity.delete()     // DO NOT WANT TO ALLOW HERE
Run Code Online (Sandbox Code Playgroud)

如何使它们在正确的上下文中显示和消失?

注意: 这个问题是由作者故意编写和回答的(答案问题),因此对于常见问题的Kotlin主题的惯用答案存在于SO中.还要澄清为Kotlin的alphas写的一些非常古老的答案,这些答案对于当前的Kotlin来说是不准确的.其他答案也欢迎,有很多样式如何回答这个问题!

dsl builder kotlin

21
推荐指数
2
解决办法
3024
查看次数

在kotlin中为Math类添加扩展函数

Math在Kotlin中添加了一个函数,但是我无法使用它,我之前使用它MutableList并且它有效但我无法用Math类来完成它.

fun Math.divideWithSubtract(num1: Int, num2: Int) = 
Math.exp(Math.log(num1.toDouble())) - Math.exp(Math.log(num2.toDouble()))
Run Code Online (Sandbox Code Playgroud)

java extension-methods kotlin

6
推荐指数
1
解决办法
611
查看次数

Kotlin扩展功能与成员功能?

我知道在Kotlin中使用扩展函数来扩展类的功能(例如,来自库或API的功能).

但是,在代码可读性/结构方面,使用扩展函数是否有任何优势:

class Foo { ... }

fun Foo.bar() {
    // Some stuff
}
Run Code Online (Sandbox Code Playgroud)

与成员函数相反:

class Foo {

    ...

    fun bar() {
        // Some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

有推荐的做法吗?

kotlin kotlin-extension

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

Kotlin 编写 helper/util 方法的好处,而无需在类中包装

在 Kotlin 中可以有两种编写辅助方法的方法

首先是

object Helper {
    fun doSomething(a: Any, b: Any): Any {
        // Do some businesss logic and return result
    }
}
Run Code Online (Sandbox Code Playgroud)

或者干脆写这个

fun doSomething(a: Any, b: Any): Any {
    // Do some businesss logic and return result
}
Run Code Online (Sandbox Code Playgroud)

在 Helper.kt 类中。

所以我的问题是在性能和​​可维护性方面哪个更好,为什么?

coding-style idioms kotlin

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