Kotlin,减少重复的代码

我的每个API服务接口类都创建了静态方法, interface AuthApiService { @FormUrlEncoded @POST(“api/auth/login”) fun postLogin(@Field(“username”) username: String, @Field(“password”) password: String): io.reactivex.Observable companion object Factory { fun create(): AuthApiService { val gson = GsonBuilder().setLenient().create() val retrofit = Retrofit.Builder() .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gson)) .baseUrl(“http:192.168.24.188:8080”) .build() return retrofit.create(AuthApiService::class.java) } } } interface BBBApiService { companion object Factory { fun create(): BBBApiService { val gson = GsonBuilder().setLenient().create() val […]

未解决的参考错误在copyOfRange

我试图复制我firstArray的前2个元素到我的secondArray。 var firstArray = arrayListOf(1,2,3,4) var secondArray = firstArray.copyOfRange(0,1) 但是,由于某些原因,我在copyOfRange中收到“未解决的引用”错误。 如果我为我的firstArray定义一个数组types,我可以解决这个问题,但我不想,因为它可以在将来包含不同的variables

为什么kotlin File类没有关闭方法?

我一直在阅读stdlib / kotlin.io.File类的KotlinDoc 。 但是我看不到有关close()方法的提及,也没有提及可自动切断的特性:那么当一个File实例被垃圾收集时真正发生了什么?

Kotlin中接收函数的文字说明

我正在关注此链接https://kotlin.link/articles/DSL-builder-in-Kotlin.html以了解Kotlin中的构建器实现。 我不明白Builder类中的方法。 方法name()接收扩展函数作为参数,它什么都不收,并返回String。 而来电者称为name { “ABC” } 。 如果调用者将String传递给name方法,它如何转换为返回String的扩展方法? 我尝试跟随接收器的函数文字的Kotlin文档,但都有样品返回Unit或指DSL建设者。 试图通过google搜索来理解,但没有把握这个概念的运气。

智能投到BootsrapButton是不可能的,因为endtrip是这个时候改变了的可变属性

我是Kotlin新手。 我有一个android项目,我选择转换为kotlin。 这是我的一段代码。 import com.beardedhen.androidbootstrap.BootstrapButton class EndTrip : AppCompatActivity(){ internal var endtrip: BootstrapButton ?= null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_end_trip) endtrip.setOnClickListener(View.OnClickListener { //Some code here } } } 但是,我得到这个错误的结束 智能投到BootsrapButton是不可能的,因为endtrip是这个时候改变了的可变属性 一个类似的问题已经在这里回答,但我不能找出解决方案。 我正在使用大胆的Android Bootstrap库 。 谢谢。

在Kotlin中枚举注释

我有一个由Gson序列化/反序列化的枚举: enum class PacketType { NONE; [SerializedName(“request”)] REQUEST; [SerializedName(“response”)] RESPONSE; [SerializedName(“event”)] EVENT; } 不幸的是,我注意到Gson忽略了SerializedName注解,并使用枚举值的大写名称。 我决定找出为什么序列化不能按预期工作,并发现Kotlin删除枚举值的所有注释。 我怎样才能使这些注释出现在生成的字节码?

在Android应用中,Firebase登录失败

我的应用程序显示在登录失败firebase上的错误..在日志中说 – com,google.firebase.auth没有find。 该怎么办 ? 我已启用电子邮件/密码登录在Firebase控制台这里是我的代码。 public override fun onStart(){super.onStart() // Check auth on Activity start if (mAuth!!.currentUser != null) { onAuthSuccess(mAuth!!.currentUser) } } private fun signIn() { Log.d(TAG, “signIn”) if (!validateForm()) { return } showProgressDialog() val email = mEmailField!!.text.toString() val password = mPasswordField!!.text.toString() mAuth!!.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> Log.d(TAG, “signIn:onComplete:” + task.isSuccessful) hideProgressDialog() […]

清单和添加所有单个语句Kotlin

kotlin中有没有什么方法可以代替两行之一。 我知道我可以创建一个扩展函数,但我很想知道它是否已经存在于kotlin中。 像listOfChecklist.clearAndAddAll() 。 listOfChecklist.clear() listOfChecklist.addAll(newList) 这是我现在手动使用扩展function。 但我希望有一个更好的解决方案。 fun MutableCollection.clearAndAddAll(replace: MutableSet) { clear() addAll(replace) }

在尝试提交广播variables的Spark中的Kafka偏移量时获取任务不可序列化

我写了从Kafka读取并且手动提交偏移量的 Spark作业。 它工作正常,但自从我引入广播variables,我得到序列化exception,因为它试图序列化KafkaInputDStream。 下面是一个显示问题的简单代码(代码是用Kotlin编写的,但我相信它也会在Java中发生): fun testBroadCast(jsc: JavaStreamingContext, kafkaStream: JavaInputDStream<ConsumerRecord>) { val keyPrefix = jsc.sparkContext().broadcast(“EVENT:”) kafkaStream.foreachRDD { rdd -> val offsetRanges = (rdd.rdd() as HasOffsetRanges).offsetRanges() val prefixedIds = rdd.map { “${keyPrefix.value}:$it” }.collect() (kafkaStream.dstream() as CanCommitOffsets).commitAsync(offsetRanges) } } fun main(args: Array) { val jsc = JavaStreamingContext(SparkConf().setAppName(“test simple prefixer”).setMaster(“local[*]”), Duration(5000)) val stream = makeStreamFromSerializableEventTopic(jsc) testBroadCast(jsc, stream) jsc.start() jsc.awaitTermination() […]

如何解释这些关于“Int”types的Kotlin代码?

var a: Int = 10000 var b: Int = 10000 print(b === a) // Prints ‘true’ 官方的文件说:“a === b评估为真,当且仅当a和b指向相同的对象。” 在上面的代码中,什么是“同一个对象”?