用Kotlin在android中声明variablestypes的正确方法是什么?

我想声明一些variablestypes的gatter和setter模型。 我可以声明简单和干净的代码,如在Java中? private String firstName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } 因为当它转换成Kotlin它看起来像: private var firstName: String? = null fun getfirstName(): String { return firstName } fun setfirstName(firstName: String) { this.firstName = firstName } 什么是正确和最清洁的方式?

Kotlin Null安全警告意外令牌(使用;在同一行上分隔expression式)

我在应用程序中尝试使用Kotlin代码中的Elvis运算符 ,并收到以下警告: Unexpected tokens (use ; to seperate expressions on the same line) 码: var key: String = “KEY is” /* “check” is name of String variable which can be null Warning coming on following statement*/ var str : String = check?key.replace(“KEY”, “ABDS-ASDSA-DSSS”)?:check 任何想法如何解决这个问题?

Kotlingenericstypes的问题

我在几个小时内就被遗忘了。 我想简化代码,但是当它的genericstypes不能投射对象时。 我怎样才能解决这个问题或另一种简化的方式? (I’m use kotlin 1.2) sealed class SETTING(override val key: String) : SettingsKeyContract object optFirstLaunch : SETTING(“first_launch”), SettingsKeyContractWithType { override val defaults = true } object optNotifications : SETTING(“notification_list”), SettingsKeyContractWithType<List> { override val defaults = emptyList() } interface SettingsKeyContract { val key: String } interface SettingsKeyContractWithType : SettingsKeyContract { val defaults: T @Suppress(“UNCHECKED_CAST”) […]

对Kotlin中的默认参数使用callBy时出错

我尝试调用带有默认参数值的函数,而不将参数放在Kotlin中。 例如: class Test { fun callMeWithoutParams(value : Double = 0.5) = value * 0.5 fun callIt(name: String) = this.javaClass.kotlin .members.first { it.name == name } .callBy(emptyMap()) } fun main(args: Array) { println(Test().callIt(“callMeWithoutParams”)) } 我有个例外: Exception in thread “main” java.lang.IllegalArgumentException: No argument provided for a required parameter: instance of fun Test.callMeWithoutParams(kotlin.Double): kotlin.Double at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod(KCallableImpl.kt:139) at […]

Kotlin List尾巴function

我正在尝试在Listfind一个尾部函数,但是我找不到任何东西。 我结束了这样做。 fun List.tail() = this.takeLast(this.size -1) 有一个更好的方法吗?

为什么不在Kotlin的Android 4.x下运行应用程序?

有一个由Kotlin制作的非常简单的应用程序,它可以在Android Studio 3.0中的Android 8.0,Android 6.0和Android 5.1下正常工作 但当我在Android 4.1下运行应用程序时,出现错误消息“java.lang.RuntimeException:无法实例化活动ComponentInfo {info.dodata.mirror / ui.UIMain}:java.lang.ClassNotFoundException:ui.UIMain”。 2(这是一个真正的手机)和Android 4.2.2 您可以通过https://www.dropbox.com/s/9f0yxp5pqqxtcxq/Mirror.zip?dl=0下载应用程序进行测试 UIMain.kt package ui import android.os.Bundle import android.support.v7.app.AppCompatActivity import info.dodata.mirror.R class UIMain : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.layout_main) } } AndroidManifest.xml中 build.gradle(模块:应用程序) apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-android-extensions’ android { compileSdkVersion 26 flavorDimensions “default” defaultConfig […]

Kotlin – 安全呼叫运营商的链接。 不必要的话务员

以下面使用安全调用操作符(?。)的示例: class Sample { class A( val sampleB: B? = B() ) class B( val sampleC: C = C() ) class C( val sampleInt: Int = 1 ) fun test() { val intInC: Int? = A().sampleB?.sampleC?.sampleInt } } 我知道我们需要一个安全的调用操作符sampleB。 但是为什么我们需要在sampleC上安全的调用操作符。 如果我删除该运算符,它不会编译。 基于我对运算符的理解,如果sampleB为空,则该行将返回null。 如果sampleB不为null,我们可以确定sampleC不是null,根据它的types。 但为什么Kotlin强制安全调用operatorC?

Gradle 3.0.0-alpha1与kotlin-android插件1.1.2-3不兼容?

我安装Android Studio 3.0 Canary 1并使用kotlin创建新项目。 并得到这个错误: 错误:无法find方法’com.android.build.gradle.internal.variant.BaseVariantData.getOutputs()Ljava / util / List;’。 这种意外错误的可能原因包括: Gradle的依赖关系缓存可能已损坏(有时发生在网络连接超时之后)。重新下载依赖项并同步项目(需要网络) Gradle构建过程(守护进程)的状态可能已损坏。 停止所有的Gradle守护进程可能会解决这个问题。 停止Gradle构建过程(需要重新启动) 您的项目可能使用与项目中的其他插件或项目请求的Gradle版本不兼容的第三方插件。 在损坏的Gradle进程的情况下,您也可以尝试关闭IDE,然后杀死所有的Java进程。 如果我从build.gradle中删除kotlin-android插件,那么它将成功构建。 构建gradle: buildscript { ext.kotlin_version = ‘1.1.2-3’ repositories { maven { url ‘https://maven.google.com’ } jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:3.0.0-alpha1’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” // NOTE: Do not place your application dependencies here; they belong // in the individual […]

任何方式在Kotlin中从相同的通用接口inheritance两次(使用单独的types)?

我在我的代码中有一个场景,我想要一个类实现两个不同types的接口,如下面的示例: interface Speaker { fun talk(value: T) } class Multilinguist : Speaker, Speaker { override fun talk(value: String) { println(“greetings”) } override fun talk(value: Float) { // Do something fun like transmit it along a serial port } } 科特林对此并不满意,理由是: Type parameter T of ‘Speaker’ has inconsistent values: kotlin.String, kotlin.Float A supertype appears twice 我知道一个可能的解决方案是实现下面的代码,在那里我用实现接口,然后检查自己的types并将它们委托给它们的函数。 […]

在Kotlin中,我如何获取数组的前n个元素

在Kotlin中,我怎样才能把这个数组的前n个元素: val allColours = arrayOf( Pair(Color.RED, Color.WHITE), Pair(Color.RED, Color.BLACK), Pair(Color.YELLOW, Color.BLACK), Pair(Color.GREEN, Color.WHITE), Pair(Color.BLUE, Color.WHITE), Pair(Color.BLUE, Color.WHITE), Pair(Color.CYAN, Color.BLACK), Pair(Color.WHITE, Color.BLACK)) 那么我怎样才能用pegColours填写第一对3? var pegColours: Array<Pair> = //??? 我尝试allColours.take但它给了一个错误: 期待一个元素