有没有可能在Kotlin中使用println作为函数引用

在Java 8和9中,可以将方法引用打印到控制台,例如: List.of(1, 2, 3).forEach(System.out::println); 在Kotlin中,我没有find使用方法引用打印到控制台的方法。 我试图翻译这个使用函数引用: listOf(1, 2, 3).forEach { println(it) } 至: listOf(1, 2, 3).forEach { ::println } 但是我得到这个错误: Overload resolution ambiguity. All these functions match. @InlineOnly public inline fun println(): Unit defined in kotlin.io @InlineOnly public inline fun println(message: Any?): Unit defined in kotlin.io @InlineOnly public inline fun println(message: Boolean): Unit defined […]

Kotlin + Mockito:得到一个null

请我有点困惑,这个测试失败与“java.lang.IllegalStateException:notNull()不能为空” : @Test fun when_resume_subscribe() { // WHEN presenter.onStart() // THEN verify(model).subscribe(notNull()) // <—- fails here } 这里是测试的方法: override fun onStart() { model.subscribe(object : Observer { override fun onCompleted() { view?.showProgress(false) } //… more stuff… 请问发生了什么?

在Android Java / Kotlin中,是否实现了一个接口直接访问嵌套类的本地variables

在Android Java / Kotlin中,是否实现了一个接口直接访问嵌套类的本地variables。 更具体地说,当访问嵌套类的局部variables时,它们通过值或引用传递给接口。

如何使用Mockito模拟kotlin ByteArray?

当我运行这个: class SomeTest { fun howToMockByteArray() { val bytes = Mockito.mock(ByteArray::class.java) } } 投掷: org.mockito.exceptions.base.MockitoException: Cannot mock/spy class [B Mockito cannot mock/spy because : – VM does not not support modification of given type 我如何使用Mockito来模拟kotlin的ByteArray?

Kotlin无法重置variables

class Sokoban(Playground: Array) { private var playground = Playground private val _Playground = Playground fun move(d: String) { …//”playground” got modified. } fun restart() { playground = _Playground } } fun main(args: Array) { val Playground: Array = arrayOf( “###########”.toCharArray(), “#$…*….#”.toCharArray(), “#..@……#”.toCharArray(), “###########”.toCharArray() ) val sokoban = Sokoban(Playground.clone()) sokoban.move(“Left”) sokoban.restart() } 当调用函数“restart”时,上面的代码被期望重置variables“playground”,但是失败。相反,variables“_Playground”被修改。 如何解决这个不正常的问题?

Android Kotlin Dagger2提供了gson:指定为非null的参数为null

我想提供一个单一的gson实例,所以我提供它在我的NetworkModule,当我创建改造api,gson是非null,但是当我在改造类中使用gson实例,它是空的.. @Module class NetworkModule { @Provides @Singleton fun provideGson(): Gson { return Gson() } @Provides @Singleton fun provideMyEnterpriseApi(gson: Gson): MyEnterpriseApi { //HERE GSON IS NOT NULL return RetrofitMyEnterpriseApi(BuildConfig.API_MYENTERPRISE_URL, BuildConfig.API_MYENTERPRISE_CONNECTION_TIMEOUT, BuildConfig.API_MYENTERPRISE_READ_TIMEOUT, gson) } } 我的翻新API类: class RetrofitMyEnterpriseApi(baseUrl: String, connectTimeout: Long, readTimeout: Long, private val gson: Gson) : RetrofitApi(baseUrl, connectTimeout, readTimeout, RetrofitMyEnterpriseCalls::class.java) { override fun buildRetrofit(baseUrl: String, […]

使用kotlin的自定义风格中的ClassNotFoundException

我定义了我自己的风格,并设置sourceSet: sourceSets { main.java.srcDirs += ‘src/main/kotlin’ // WORKS myflavor.java.srcDirs += ‘src/myflavor/kotlin’ // DOESN’T WORK } 这里是我的项目结构: 但是…我收到以下错误: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{xyz/xyz.MainActivity}: java.lang.ClassNotFoundException: Didn’t find class “xyz.MainActivity” on path: DexPathList[[zip file “/data/app/xyz/base.apk”],nativeLibraryDirectories=[/vendor/lib, /system/lib]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) […]

gRPC protobuf不能用kotlin编译(Android Studio 3.0)

我创建了一个gRPC项目,与https://github.com/grpc/grpc-java/tree/master/examples/android/helloworld中用于android项目的示例gRPC非常相似 我第一次得到我自己的项目与我自己的简单的.proto文件编译没有任何错误。 我只是复制和粘贴所有重要的build.gradle部分。 下面的版本改变了我的MainActivity Kotlin代码。 但现在,我已经添加了一些更多的我的.proto文件,Gradle无法建立我的项目。 .proto文件是正确的,我已经尝试添加它作为依赖compileDebugKotlin {}和compileReleaseKotlin {}但没有任何工作。 我得到以下错误消息,任务:generateDebugProto未定义。 但我很困惑,因为当我添加一个换行符到我的build.gradle并单击在Android Studio中立即同步时,Gradle同步成功完成,并在gradle日志中看到以下几行: :app:extractDebugProto :app:extractIncludeDebugProto :app:extractProto :app:generateDebugProto 我做错了什么? 我的项目build.gradle // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = ‘1.2.0’ repositories { google() jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:3.0.1’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” classpath “com.google.protobuf:protobuf-gradle-plugin:0.8.3” // NOTE: Do not place […]

kotlin:通用于不同的types

我需要这样的线性函数: class Linear(val a : Double, val b : Double) { fun eval(in : Double) { return a*in + b } } 然后,我需要为矢量相同的东西。 class Vector3d(val a1 : Double, val a2 : Double, val a3 : Double) { // use operator overloading https://kotlinlang.org/docs/reference/operator-overloading.html to make +, -, /, *, etc. possible for vectors } class Linear(val […]

Kotlin的Android扩展和variables

在Kotlin之前,Android开发人员应该在这样一个variables中保存对Activity的Views的引用: Button fooBtn = (Button) findViewById(R.id.btn_foo) 以减少锅炉代码的数量和findViewById调用的数量。 通过引入Kotlin的Android扩展,我们可以通过简单地使用以下参考来引用相同的Button: btn_foo 问题: btn_foo是否保存了Button的引用,还是每次调用findViewById ? 开发者是否btn_foo使用variables来存储btn_foo来提高应用程序的性能,或者直接在代码中使用呢? 编辑:有一个解释如何扩展工作,但它仍然有点不清楚。