Tag: 拉姆达

为什么我不能在kotlin中使用lambda接口?

看,我有一个Java类: public final class JavaReceiveSingle { public static void useSingle(Single single) { single.doSth(); } public static void useSingle2(SingleInterface singleInterface) { singleInterface.doSth(); } } 一个Java界面: public interface SingleInterface { void doSth(); } 一个kotlin界面: interface Single { fun doSth() } 现在我可以在一个kotlin类中使用lambda: JavaReceiveSingle.useSingle2({}) 但是如果我想对kotlin接口做同样的事情: JavaReceiveSingle.useSingle({}) IDE将显示错误:必需:单个! 发现:() – >单位 如果我指定单一像: JavaReceiveSingle.useSingle(Single{}) 仍然错误:接口单一没有结构! 尽管下面的代码工作: JavaReceiveSingle.useSingle(object :Single{ override fun aa() […]

Kotlin lambda和类型推断

我在Kotlin中实现了以下枚举 enum class PlaylistAction(val playlistFilter:(Playlist) -> Boolean) { PLAY ({ it.playListOwner.Id == "xxx" }), SAVE({true}) } 我想用它来过滤一个像这样的List: var test = playlists.filter { playlistActionType.playlistFilter} 其中playlistActionType是PlaylistAction类型, PlaylistAction列表是List<Playlist> 但我收到以下错误: 错误:(122,34)类型不匹配:推断的类型是(播放列表) – >(播放列表) – >布尔,但(播放列表) – >布尔是预期的 为什么推断的类型(播放列表) – >(播放列表) – >布尔,而不是(播放列表) – >布尔?

将比较器转换为Kotlin中的lambda

在我的Kotlin代码中有一个代码片段: val dataMap = sensoryDataUsage.groupBy { it } .mapValues { it.value.count().toDouble()/count } .mapKeys { println(it.key); it.key.toDouble()/max } .toSortedMap(object : Comparator<Double> { override fun compare(p0: Double, p1: Double): Int { return (p1-p0).compareTo(0) } }) 它工作得很好。 然而,IDE不断建议我将该Comparator对象转换为lambda,我只是这样做了: val dataMap = sensoryDataUsage.groupBy { it } .mapValues { it.value.count().toDouble()/count } .mapKeys { println(it.key); it.key.toDouble()/max } .toSortedMap {x, y -> […]

Kotlin:对Lambda的声明

我怎样才能做一个Kotlin声明到lambda? 我知道你可以这样做: fun foo() : () -> Unit { return { println("Hello World") } } //more beautiful: fun foo() : () -> Unit = { println("Hello World") } 是否也可以创建一个匿名lambda没有大括号{…} ? 特别是在switch语句中,花括号的常用方式看起来不太好。 fun bar(i: Int) : () -> Unit { return when (i) { 0 -> { { println("Hello") } } 1 -> { { println("World") […]

Kotlin:内联lambda和重载解析模糊

我有一个简单的工厂模式,其中的实现是通过重载决议确定的。 问题是,Kotlin编译器抱怨“重载解析歧义..”为内联lambda。 class Foo(){ companion object Factory { fun create(x: Int, f: (Int) -> Double) = 2.0 fun create(x: Int, f: (Int) -> Int) = 1 } } fun main(args:Array<String>){ val a = Foo.create(1,::fromDouble) //OK val b = Foo.create(1,::fromInt) //OK val ambiguous = Foo.create(1){i -> 1.0} //Overload resolution ambiguity? } fun fromDouble(int:Int) = 1.0 fun […]

什么是Kotlin结构?

我正在看这个Kotlin对象声明: object A : B({ variableName1 = "text1" variableName2 = "text2" params { param("Foo", "Bar") } }) 而我无法弄清楚B类构造函数的参数是什么。 我在这个例子中有目的地提取了信息,但是B类实际上是 jetbrains.buildServer.configs.kotlin.v10.BuildType 而我无法找到该类型的文档。 我发现了一些接近的东西,但它是一个接口的定义,因此没有构造函数。 总而言之,Kotlin的这个构造是什么? { variableName1 = "text1" variableName2 = "text2" params { param("Foo", "Bar") } }

Kotlin:lambda从不编译

我刚刚开始学习Kotlin,在那里我遇到了lambda语法问题。 有一个小例子: class MathFunctions { @FunctionalInterface interface Operation { fun calculate(a: Int, b: Int): Int } fun makeCalculations(a: Int, b: Int, operation: Operation): Int = operation.calculate(a, b) companion object { @JvmStatic fun main(args: Array<String>) { val plus = Operation { a, b -> a + b } val mathFunctions = MathFunctions() println(mathFunctions.makeCalculations(10, 20, plus)) } […]