是否有一个内置的Kotlin方法来将void函数应用于值?

我写了这个方法来将一个void函数应用到一个值并返回值。 public inline fun T.apply(f: (T) -> Unit): T { f(this) return this } 这在减少这样的事情上是有用的: return values.map { var other = it.toOther() doStuff(other) return other } 像这样的东西: return values.map { it.toOther().apply({ doStuff(it) }) } 有没有这样的语言function或方法已经建立到Kotlin?

Kotlin对象expression式没有按预期工作

我正在通过GitHub上的Kotlin练习(请参阅下面的链接)。 我不太了解下面的代码。 特别 鼠标侦听器在哪里创建? mouseListener如何被调用? 它被调用4次。 我以前没有看到这个语法。 如果你能指出文档,那将是非常好的。 / /这个代码是在github上,正在工作 val result = task10 {mouseListener – > mouseListener.mouseClicked(MouseEvent)方法 mouseListener.mouseClicked(MouseEvent)方法 mouseListener.mouseClicked(MouseEvent)方法 mouseListener.mouseClicked(MouseEvent)方法 } 我在想代码应该写成如下所示。 但是,如果我跑了,没有事件被触发。 // this is not working val result = task10 { mouseListener -> { mouseListener.mouseClicked(mouseEvent) mouseListener.mouseClicked(mouseEvent) mouseListener.mouseClicked(mouseEvent) mouseListener.mouseClicked(mouseEvent) } } 该方法的完整声明是: fun task10(handleMouse: (MouseListener) -> Unit): Int { var mouseClicks = 0 […]

Kotlin内联属性的用例是什么?

由于属性的getter或setter通常不具有作为参数或具体types的function,使用inline属性的好处/用途是什么? 如果好处是减少与方法调用相关的成本,为什么不默认所有属性getter / setter内联? Kotlin内联属性 例如。 val foo: Foo inline get() = Foo() var bar: Bar get() = … inline set(v) { … }

Lint认为Kotlin MutableMap.forEach()是java.util.Map.forEach()

我在Android项目中使用Kotlin的MutableMap。 并试图做一些行动每个项目。 所以这里是我的代码。 private val uris: MutableMap = mutableMapOf() // … Fill the items here … uris.forEach { val ref = FirebaseFirestore.getInstanse().reference uploadFile(ref, it.value) } 在运行时,一切正常,但我的CI构建失败,下面的lint错误: MyActivity.kt:142: Error: Call requires API level 24 (current min is 16): java.util.Map#forEach [NewApi] uris.forEach { ~~~~~~~ 我知道在min sdk是24之前我们不能使用JDK-8的Map项目。但是为什么lint会把它看作是JDK-8的Map? 有关更多信息,我尝试从AS中的Kotlin Bytecode选项获取Java代码,并发现forEach按预期方式被替换为while循环和迭代器。 那么可能是什么原因以及如何解决呢? 任何主角将不胜感激。

如何使用Kotlin编写Y-combinator函数?

我可以使用Kotlin FP(Lambda,函数)编写Y组合函数吗? Y = λf.(λx.f (xx)) (λx.f (xx)) 在JS中: function Y(f) { return (function (g) { return g(g); })(function (g) { return f(function (x) { return g(g)(x); }); }); } var fact = Y(function (rec) { return function (n) { return n == 0 ? 1 : n * rec(n – 1); }; }); 在咖啡: […]

如何使用Android中的Kotlin从NavigationView的headerLayout中指定的布局访问视图

我想要访问NavigationView的headerLayout内包含的TextView。 是否有可能使用Kotlin android扩展来访问视图? 我没有使用此方法,但TextView(这里txtName)始终为空。 这是我的activity_main.xml nav_header_splash.xml 在MainActivity.kt我已经导入 import kotlinx.android.synthetic.main.nav_header_splash.* 在Activity类的onCreate()中设置文本类似 txtName.text = “Sample Code” 应用程序文件夹的构建 apply plugin: ‘kotlin-android-extensions’ 建立我的项目 classpath “org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version” 我的代码有错吗? 请帮忙。 我是Kotlin的新人。

Retrofit2 + Kotlin中的SimpleXML:MethodException:注释必须标记一个set或get方法

我想从API中获取XML数据,并使用Kotlin中的Retrofit2 + SimpleXML将其映射到Kotlin模型对象。 但是,我从SimpleXML得到如下错误信息。 org.simpleframework.xml.core.MethodException:Annotation @ org.simpleframework.xml.Element(data = false,name =,required = true,type = void)必须标记一个set或get方法 这是提取的XML数据 Success XXXXXXXXXXXXXXXXXXXX 4294967295 下面是Kotlin模型对象 @Root(name = “response”) public class User() { @Element public var result: String? = null @Element public var token: String? = null @Element public var uid: String? = null } 和APIClient如下。 interface MyService { @GET(“/testLogin.xml”) fun getUser(): […]

使用命令行参数的Kotlin Gradle Spring bootRun任务

我有一个像下面的命令行亚军Kotlin春季启动应用程序。 @SpringBootApplication class MySpringApplication : CommandLineRunner { override fun run(vararg args: String?) { println(args[0]) } } fun main(args: Array) { val app = SpringApplication(MySpringApplication::class.java) app.setBannerMode(Banner.Mode.OFF) app.run(*args) } 我想知道如何通过命令行参数,当我使用gradle命令,./ ./gradlew bootRun ?

使用kapt时,Realm在Java / Kotlin项目中不生成RealmProxy类

我正在尝试将领域集成到Java / Kotlin项目中,但是kapt甚至不会为.java文件生成RealmProxy类 我已经更新领域,因为这一点 ,但仍然无法正常工作 Gradle应用程序文件: apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-kapt’ apply plugin: ‘realm-android’ repositories { maven { url ‘https://maven.fabric.io/public’ } } kapt { generateStubs = true } project.ext { daggerVersion = ‘2.2’ } dependencies { compile “org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version” compile “org.jetbrains.kotlin:kotlin-reflect:$kotlin_version” kapt “com.android.databinding:compiler:2.3.3” annotationProcessor group: ‘com.google.dagger’, name: ‘dagger-compiler’, version: “${daggerVersion}” compile group: […]

当试图返回内联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的值可以内联,而这似乎导致错误。