我想声明一些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代码中的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 任何想法如何解决这个问题?
我在几个小时内就被遗忘了。 我想简化代码,但是当它的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中。 例如: 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 […]
我正在尝试在Listfind一个尾部函数,但是我找不到任何东西。 我结束了这样做。 fun List.tail() = this.takeLast(this.size -1) 有一个更好的方法吗?
有一个由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 […]
以下面使用安全调用操作符(?。)的示例: 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?
我安装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 […]
我在我的代码中有一个场景,我想要一个类实现两个不同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个元素: 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但它给了一个错误: 期待一个元素