Kotlin是否支持expression式树?

似乎有一个计划,在语言中包括这个function,但我找不到有关它的任何文档。 Kotlin是否支持expression式树? 这个function仍然在路线图上吗?

在Kotlin中渲染json响应

我是Kotlin和Java的新手。 我试图做一个API调用,然后在Kotlin中呈现它。 这是我得到的JSON响应: [ { “AWBNo”: “1326217373504”, “AuthKey”: “Valid”, “OrderNo”: “SGHRGR15073TCC”, “ReturnMessage”: “Successful”, “ShipmentSummary”: [ { “PickUpDate”: “08-10-2017”, “PickUpTime”: “0015”, “OriginLocation”: “DEL/WDL, Delhi NCR, DELHI”, “DestinationLocation”: “”, “Weight”: “0”, “ExpectedDeliveryDate”: “10/11/2017 12:21:32 AM”, “Status”: “Delivered”, “StatusCode”: “DLVD”, “StatusDate”: “11-10-2017”, “StatusTime”: “1316”, “Location”: “Berhampur, Berhampur, ORISSA”, “Comment”: “Shipment Delivered by SR: RAKESH, DeliveryDate:2017-10-11 1316, Receiver Name: […]

如何使IntelliJ参考源代码在另一个模块?

我有一个典型的项目结构: – root-dir (not a project) \- core-module (a gradle project) \- application (a gradle project) core-module和application都被导入IntelliJ并保持在自动导入。 在application的build.gradle , core-module被引用为: compile(‘my-group-id:core-module:0.2.0-SNAPSHOT’) 其中0.2.0-SNAPSHOT是在core-module的gradle.properties声明的当前版本。 在application ,当我尝试从core-module查看一个类时,我将其带入core-module-0.2.0-SNAPSHOT-sources.jar中的源代码,而不是core-module模块中的相应源代码。 我知道我可以在application手动添加core-module作为模块依赖项,但下一次application的build.gradle任何内容build.gradle改变,自动导入将会覆盖该依赖项。 有没有什么办法让IntelliJ自动识别,我想从另一个模块查看类,并去那里,而不是下载的源代码jar? 此外,有没有什么办法让IntelliJ总是比依赖jar更喜欢core-module模块,不仅用于代码查看,还用于构建/运行/调试等等。 所有的源文件都在Kotlin,FWIW。

在Kotlin中使用泛化generics的正确方法

我想重写SharedPreferences小扩展函数。 现在看起来像这样 fun SharedPreferences.put(arg: Pair) { val e = edit() val s = arg.second when (s) { is Int -> e.putInt(arg.first, s) is String -> e.putString(arg.first, s) is Boolean -> e.putBoolean(arg.first, s) is Long -> e.putLong(arg.first, s) else -> throw NotImplementedError(“Extension not implemented for this type”) } e.apply() } 是否有什么惯用的方式来使用generics? 我的第一个猜测是 inline fun SharedPreferences.put(arg: Pair) […]

Kotlin中的静态扩展方法

你如何在Kotlin中定义一个静态的扩展方法? 这甚至有可能吗? 我目前有一个扩展方法如下所示。 public fun Uber.doMagic(context: Context) { // … } 上面的扩展可以在一个实例上调用。 uberInstance.doMagic(context) // Instance method 但是我如何使它静态方法如下所示。 Uber.doMagic(context) // Static or class method

Kotlin JS用可选的参数错误重写“外部”函数

我拉着jQuery在我的项目中使用ts2kt。 基本工作正常,但是,我不知道如何调用这个函数(我只是想传递一个回调): fun done(doneCallback1: JQueryPromiseCallback? = definedExternally /* null */, vararg doneCallbackN: JQueryPromiseCallback): JQueryPromise JQueryPromiseCallback接口如下所示: external interface JQueryPromiseCallback { @nativeInvoke operator fun invoke(value: T? = definedExternally, vararg args: Any) } 我试图创建一个它的实例传入像这样: done(object : JQueryPromiseCallback { override fun invoke(value: Any?, vararg args: Any) { } }) 但是,我得到一个错误的调用函数: 使用可选参数重写“外部”function 生成的@nativeInvoke注释也被弃用,并给我一个我不明白的弃用信息: 使用动态的身体使用内联扩展function 我应该纠正ts2kt生成的文件? 如果是这样,怎么样? 我只是没有覆盖invoke方法的语法吗?

测试环境配置:Android + JUnit 5 + Mockito + Spek + Kotlin

我很难配置基于JUnit Jupiter(5)的测试环境。 我有两个不同的错误: WARNING: TestEngine with ID ‘spek’ failed to discover tests org.junit.platform.commons.util.PreconditionViolationException: Could not load class with name… Exception in thread “main” java.lang.NoSuchMethodError: org.junit.platform.launcher.Launcher.execute(Lorg/junit/platform/launcher/LauncherDiscoveryRequest;)V at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:61)… 配置如下。 主build.gradle : apply plugin: ‘org.junit.platform.gradle.plugin’ buildscript { ext.kotlin_version = ‘1.1.4-3’ repositories { google() jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:3.0.0-beta5’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” classpath “org.junit.platform:junit-platform-gradle-plugin:1.0.0” classpath “de.mannodermaus.gradle.plugins:android-junit5:1.0.0” } } […]

Kotlin中的Void返回types是什么意思?

我试图在Kotlin中创建没有返回值的函数。 而且我用Java编写了一个函数,但是使用了Kotlin语法 fun hello(name: String): Void { println(“Hello $name”); } 我有一个错误 错误:带有块体('{…}’的函数中需要“返回”expression式) 经过几次更改后,我得到了一个可为空函数作为返回types的工作函数。 但这不完全是我所需要的 fun hello(name: String): Void? { println(“Hello $name”); return null } 根据Kotlin文档,单元types对应于Java中的voidtypes。 所以在Kotlin中没有返回值的正确函数是 fun hello(name: String): Unit { println(“Hello $name”); } 要么 fun hello(name: String) { println(“Hello $name”); } 问题是: Void在Kotlin中意味着什么,如何使用它,以及这种用法的优点是什么?

如何在Kotlin中实现这个Java接口?

既然Kotlin没有原始的东西,那怎么能实现呢? public interface A { Object get(Integer i); Object get(int i); } 我无法更改Java代码,因为它是库中已编译的类文件。

科特林强制重写一个函数

我正在创建一个基类。 我有一些代码 开始() 。 还有一个bar()需要被inheritanceFoo的类所超越 start()调用bar() 我的例子(foo.kt): open class Foo { fun start() { bar() //… } fun bar() { TODO(“implement me in deriving class”) } } 我不喜欢bar()抛出exception,我不喜欢把bar()留给空白的body 有什么我忘了这是在Kotlin 更好的选择 ?