Kotlin中的模式匹配很好,不会执行下一个模式匹配的事实在90%的用例中是很好的。 在Android中,当数据库被更新的时候,如果我们不打算让代码看起来像这样,我们使用Java开关属性继续下一个案例: switch (oldVersion) { case 1: upgradeFromV1(); case 2: upgradeFromV2(); case 3: upgradeFromV3(); } 因此,如果某人有一个应用程序版本1的数据库,并与数据库版本2错过了应用程序版本,他会得到所有必要的升级代码执行。 转换到科特林,我们得到一个混乱像: when (oldVersion) { 1 -> { upgradeFromV1() upgradeFromV2() upgradeFromV3() } 2 -> { upgradeFromV2() upgradeFromV3() } 3 -> { upgradeFromV3() } } 这里我们只有3个版本,想象一下当DB达到版本19时:/ 无论如何,当以相同的方式进行行动而不是开关? 我试着继续没有运气。
使用Class.forName()时是否可以使用实例检查(即x is String Kotlin中的x is String检查Class.forName() ? 我想将它应用于仅在运行时可用的类,而不是在编译时。 MWE: val x = “banana” val specialClass = Class.forName(“org.company.specialclass.at.runtime”) x is specialClass 但是,我在specialClass上得到了未解决的引用。 有任何想法吗?
对不起,但我找不到从谷歌搜索的答案…在kotlin中运行bash命令的语法是什么? 我想做一个curl命令。 那里的文档似乎非常有限,或者我在Google上搜索不好?
我有一个庞大的项目,数据绑定,kotlin,匕首。 我花了几天的时间尝试使用几个stackoverflow的解决方案来构建它,并决定亲自问一下。 我假设一些第三方库使用数据绑定,因为添加这条线没有帮助。 kapt ‘com.android.databinding:compiler:3.0.0′ Android Studio说: ‘androidProcessor’依赖不会被识别为kapt注释处理器。 请将配置名称更改为“kapt”以获取这些工件:“com.android.databinding:compiler:3.0.0”。 我所尝试过的并没有帮助: kapt { generateStubs = true } 在local.properties中: kotlin.incremental=false 另一个SO解决方案没有帮助 : kapt (‘com.android.databinding:compiler:3.0.0’){ force = true } 我的build.gradle apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘blockcanaryex’ apply plugin: ‘kotlin-kapt’ apply plugin: ‘newrelic’ apply plugin: ‘kotlin-android-extensions’ def props = new Properties() file(“newrelic.properties”).withInputStream { props.load(it) } android […]
我如何使用这个操作符? int a = 5 | 10; int b = 5 & 10; 它可以在Java中使用,但在Kotlin中看不到。
我经常使用UUID.randomUUID() 。 由kotlin推断的types是UUID! 。 有没有什么办法告诉kotlin这种特定方法的返回types是UUID ,并且始终为非null? 或者我必须做到处都UUID.randomUUID()!! 或者实施我自己的方法?
我用Kotlin beta-1038使用IntelliJ 15,并且在eclipse底部得到这个错误。 Internal Error occurred while analyzing this expression: java.util.ServiceConfigurationError: org.jetbrains.kotlin.resolve.ExternalOverridabilityCondition: Provider org.jetbrains.kotlin.load.java.ErasedOverridabilityCondition not found at java.util.ServiceLoader.fail(ServiceLoader.java:239) at java.util.ServiceLoader.access$300(ServiceLoader.java:185) at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:372) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) at java.util.ServiceLoader$1.next(ServiceLoader.java:480) at kotlin.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:949) at kotlin.CollectionsKt.toCollection(Unknown Source) at kotlin.CollectionsKt___CollectionsKt.toArrayList(_Collections.kt:942) at kotlin.CollectionsKt.toArrayList(Unknown Source) at kotlin.CollectionsKt___CollectionsKt.toList(_Collections.kt:973) at kotlin.CollectionsKt.toList(Unknown Source) at org.jetbrains.kotlin.resolve.OverridingUtil.(OverridingUtil.java:41) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.generateFakeOverrides(DeserializedClassDescriptor.kt:216) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.computeNonDeclaredFunctions(DeserializedClassDescriptor.kt:202) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.computeFunctions(DeserializedMemberScope.kt:77) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.access$computeFunctions(DeserializedMemberScope.kt:32) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope$functions$1.invoke(DeserializedMemberScope.kt:50) at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope$functions$1.invoke(DeserializedMemberScope.kt:32) […]
我有一个使用Kotlin Gradle插件的Gradle项目。 我想建立一个Java 9模块,所以我的目录结构如下所示: src/main/java/ – module-info.java src/main/kotlin/ – Foo.kt – Bar.kt build.gradle … 我的build.gradle声明以下依赖项: dependencies { compile “org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.10” compile “org.jetbrains.kotlin:kotlin-reflect:1.2.10” compile “org.junit.jupiter:junit-jupiter-api:5.0.2” } 我在我的Kotlin源码( Foo.kt , Bar.kt ,…)中使用所有这些依赖关系。 一切工作hunky-dory,如果我写我的module-info.java像这样: module my.module { requires kotlin.stdlib; exports my.module.pkg; } 如果我在compileJava任务中使用这种技术将所有的编译时间依赖关系提供给javac 。 但是,如果我在compileJava任务(编译module-info.java )期间打开-Xlint:all的Java编译器,我会得到以下警告: /path/to/my.module/src/main/java/module-info.java:26: warning: requires directive for an automatic module requires kotlin.stdlib; ^ 所以在这里我们有Java编译器, javac抱怨kotlin.stdlib是一个自动模块,所以我不应该有一个kotlin.stdlib子句。 […]
我正在使用Maven和kotlin-maven-plugin来编译代码。 kotlin-maven-plugin org.jetbrains.kotlin ${kotlin.version} compile process-sources compile src/main/kotlin src/main/resources target/generated-sources/jooq-h2 test-compile process-test-sources test-compile src/test/kotlin target/generated-sources/jooq-h2目录包含Java源文件。 我遵循Kotlin手册和其他人的建议 ,将Kotlin压缩放在process-sources而不是compile 。 我(可能是错误的?)假设Kotlin编译器也负责为我编译这些Java文件。 但是,在一些服务器上(例如Jenkins CI),我得到了一些奇怪的编译错误消息,比如: [ERROR] /var/lib/jenkins/jobs/jooq-build/workspace/jOOQ-examples/jOOQ-kotlin-example/target/generated-sources/jooq-h2/org/jooq/example/db/h2/tables/Author.java:[35,37] error: generics are not supported in -source 1.3 这是为什么?
我试图使用具体化types作为扩展function的函数,但我不认为这是可能的,因为我检查生成的字节码后,我发现方法签名是私人的,任何解决方法,使其公开? CommonExtensions.kt inline fun Context.startActivity() { val intent = Intent(this, T:: class.java) startActivity(intent) } fun View.visible() { visibility = View.VISIBLE } Kotlin字节代码: private final static startActivity(Landroid/content/Context;)V @Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0 … 客户代码: Kotlin文件 override fun showMessageEmptyOfferFeeds() { mOfferFeedsWarning.visible() // “visible()” extension func RESOLVED } Java文件 showProfileDetailsUi(){ startActivity() //”startActivity()” extension func NOT RESOLVED }