Tag: lambda

当试图返回内联lambda时,Kotlin“预计没有参数”

我试图写一个Kotlin函数返回一个lambda采取参数。 我试图使用下面的代码来做到这一点: fun makeFunc() : (T.() -> Unit) { return { t: T -> print(“Foo”) } } 注意:在实际的程序中,function比较复杂,使用t 。 Kotlin认为这是无效的,在t: T给出了’Expected no parameters’错误。 但是,首先将这个lambda赋值给一个variables不会被拒绝,并且工作正常: fun makeFunc() : (T.() -> Unit) { val x = { t: T -> print(“Foo”) } return x } 这两个片段似乎是相同的,为什么这是这种情况? return语句之后的花括号是否被解释为lambda之外的东西? 此外,IntelliJ告诉我,variables的值可以内联,而这似乎导致错误。

Kotlin – 非法使用内联参数回调

我将我的lambda作为parameter function转换为inline function以提高性能。 我有typesMutableList Unit>variables的lambda list作为类中的数据成员。 当我尝试添加lambda parameter到list 。 Kotlin编译器说: 非法使用内联参数回调 这是代码 // Some code skipped object Odoo { val pendingAuthenticateCallbacks = mutableListOf Unit>() inline fun authenticate( login: String, password: String, database: String, quick: Boolean = false, crossinline callback: Authenticate.() -> Unit ) { // Following statement has error saying // Illegal usage of inline […]

Kotlin:使用lambda代替function界面?

在Java中,我们可以这样做Events.handler(Handshake.class, hs -> out.println(hs)); 但是在Kotlin中,我试图复制这个行为来取代这个: Events.handler(Handshake::class, object : EventHandler { override fun handle(event: Handshake) { println(event.sent) } }) 用更方便: Events.handler(Handshake::class, EventHandler { println(it.sent) }) 出于某种原因参考EventHandler : 更好的是,但是我想使用更短的东西,像这样: Events.handler(Handshake::class, { println(it.sent) }) 或者使用广告的function来使用这样的方法: Events.handler(Handshake::class) { println(it.sent) } 这是我的Events对象: import java.util.* import kotlin.reflect.KClass object Events { private val map = HashMap<Class, Set<EventHandler>>() fun handler(eventType: KClass, handler: EventHandler) […]

如何检查kotlin中的lambda空虚

如何检查Kotlin中的lambda是否为空? 例如,我有类似的签名 onError:(Throwable) -> Unit = {} 我怎么能不同的是它的默认值来应用到这个函数的身体或价值?

Kotlin多层它参考

如何从第三层引用第二层“it”而不创建新的val / var? 我知道你可以做val mydata =它,然后做mydata.id.toString()我只是想知道Kotlin有什么东西可以让我从更高层次引用它吗? data.arrayresults.forEach { val result = it result.myData.let { val itemView – inflater.inflate(R.layout.somelayout) itemView.setOnClickListener(View.OnClickListener { // the it references the view but I want it to reference the result.myData SomeActivity.startActivity(context, it.id.toString()) }) } }

Java 8中“function接口”的精确定义

最近我开始研究Java 8,我不能完全理解Java实现lambdaexpression式所必需的“function接口”的概念。 在Java中有一个非常全面的 lambda函数的指南 ,但是我陷入了定义函数接口概念的章节 。 定义如下: 更确切地说,一个function接口被定义为只有一个抽象方法的任何接口。 然后他继续举例,其中一个是Comparator接口: public interface Comparator { int compare(T o1, T o2); boolean equals(Object obj); } 我能够测试,我可以使用lambda函数来代替Comparator参数,它的工作原理(即Collections.sort(list, (a, b) -> ab) )。 但是在Comparator接口中, compare和equals方法都是抽象的,这意味着它有两个抽象方法 。 那么如果定义需要一个接口只有一个抽象方法 ,那么这怎么可能呢? 我在这里错过了什么?

Kotlin lambda以Interface作为参数

我对Koltin lambdas有点困惑,我想知道如何使用它,给出以下代码片段: interface KotlinInterface { fun doStuff(str: String): String } 而需要这个接口的函数作为parameter passing: fun kotlinInterfaceAsArgument(kotlinInterface: KotlinInterface): String{ return kotlinInterface.doStuff(“This was passed to Kotlin Interface method”) } fun main(args: Array){ val newString = kotlinInterfaceAsArgument({ str -> str + ” | It’s here” //error here (type mismatch) }) } 但是,Java中的相同逻辑按照预期编译和运行。 public class JavaClass { public String javaInterfaceAsArgument(JavaInterface javaInterface){ […]

Lambda在kotlin中的接口实现

kotlin中的代码会是什么样子,似乎没有什么工作我尝试: public interface AnInterface { void doSmth(MyClass inst, int num); } 在里面: AnInterface impl = (inst, num) -> { //… }

Kotlin和杰克不受支持(Android Studio 2.3.2)

我在用Jack配置kotlin插件时出现这个错误。 我目前正在使用Android studio 2.3.2。 错误:Kotlin Gradle插件不支持弃用的Jack工具链。 禁用杰克或恢复到Kotlin Gradle插件版本1.1.1。

kotlin:2个lambda参数的语法

我是新来的kotlin。 我有一个与2重载的方法的Java类。 一个接受一个function,另一个接受两个function mapToEntry(Function valueMapper) 和 mapToEntry(Function keyMapper, Function valueMapper) nowm in kotlin,我试图调用与2参数的版本(如在Java中): myClass.mapToEntry(r -> r, r -> r) 但我得到编译错误。 Kotlin:意外的令牌(使用’;’来分隔同一行上的expression式) 什么是正确的语法?