Tag: 科特林

Kotlin:方法不能和generics一起使用

作为这个的另一面: interface PacketDecoder : PacketTranscoder { fun decode(client: Client, buf: ByteBuf): T } 我正在尝试使用这个: interface PacketEncoder : PacketTranscoder { fun encode(packet: T, buf: ByteBuf) } 虽然PacketDecoder似乎工作正常,我不能引用encode(T, ByteBuf)方法。 IntelliJ IDEA自动完成甚至不显示它作为一个选项,手动写入它导致一个未解决的参考错误。 为了解决它,我目前正在使用这个黑客,但我不认为这是做到这一点的正确方法。 fun encode(packet: P, buf: ByteBuf)

我可以懒惰初始化一个值取决于构造函数?

我有一个课程,要么知道创造的具体价值,要么我需要创造它,这有点贵。 只有在实际需要时才能生成该值? val expensiveProperty: A constructor(expensiveProperty: A) { this.expensiveProperty = expensiveProperty } constructor(value: B) { // this doesn’t work this.expensiveProperty = lazy { calculateExpensiveProperty(value) } }

移除Firebase侦听器不适用于Android

我将一个事件值侦听器添加到引用,当我想删除它,但它不起作用。 override fun onStart() { super.onStart() stateListener =dbReference.stateRef.addValueEventListener(object : ValueEventListener { override fun onCancelled(p0: DatabaseError?) { TODO(“not implemented”) //To change body of created functions use File | Settings | File Templates. } override fun onDataChange(snapshot: DataSnapshot?) { //there is my functions }) } override fun onStop() { super.onStop() dbReference.stateRef.removeEventListener(stateListener) Log.d(“My_TAG”, “$stateListener “) } 这是我添加活动的唯一地方。 编辑后(仍然不工作) […]

为什么这个Kotlin代码仍然需要? 访问成员?

我在Kotlin类中有以下function: private fun raiseResponse(ex: Exception, resObj: JSONObject) { if (_activity == null || _responseHandler == null) return _activity.runOnUiThread { _responseHandler.invoke(ex, resObj) } } 在哪里_activity和_responseHandler被定义为: var _activity: Activity? = null var _responseHandler: ((Exception, JSONObject) -> Unit)? = null 但是,调用runOnUiThread的行只会在我使用?.编译?. 而不是. 。 我试过谷歌搜索,但恐怕我的术语是缺乏的。 我认为我的空检查的第一行raiseResponse足以确保?. 是不必要的?

如何使用ByteArray.getOrElse

我不知道如何指定`ByteArray.getOrElse()函数的默认值。 我试过了: myInt = dat.getOrElse(0, 0).toInt() 但编译器抱怨以下错误: The integer literal does not conform to the expected type (Int) -> Byte 如何指定默认值?

在Kotlin中不能返回tailrec函数的阶乘结果

我在Kotlin练习递归,并决定创建一个阶乘函数 fun fact(x:Int):Int{ tailrec fun factTail(y:Int, z:Int=1) : Int{ if (x == 0) {return z} else if (x == 1) {return z} else { return factTail(y-1, y*z) } } return factTail(x,1) 我只是主要调用这个函数: fun main(args: Array) { println(“5! is ${fact(5)}”) } 我没有得到任何错误,但我也看不出结果。

Kotlin:For-loop范围必须有一个“iterator()”方法

如果我使用var charSet = 1..10它的作品,但是当我使用下面的代码,我得到这个错误。 var charSet = “A”..”Z” for (value in charSet) { println(“$value”) } For-loop范围必须有一个“iterator()”方法。 请让我知道如何解决这个问题。

是否可以为参数函数定义一个默认值?

是否可以将默认函数定义为Kotlin中另一个函数的参数? 我知道,我们可以定义对象的默认值,但不知道如何做参数function。 谢谢。

什么是伴侣对象,为什么我们需要它?

我目前正在学习Kotlin语言。 我想知道什么是伴侣对象,为什么我们需要它? 我认为斯卡拉有一个类似的概念。

如何将实现委托给Kotlin中的一个属性?

Kotlin使我能够通过委托一个主构造器参数来实现一个接口,如下所示: class Foo(xs : ArrayList) : List by xs { } 但是,这展示了支持实施者给用户。 委托给匿名人员似乎也没关系: class Foo() : List by ArrayList() { } 这隐藏了实现细节,但我们无法访问接口提供的function,在这种情况下,这是可变的。 因此,我想将实现委托给一个不在主要构造函数中的属性。 我想要的是类似于 class Foo() : List by xs { val xs : List = ArrayList() } 不编译。 是否有可能在类体中明确定义一个属性,并且仍然能够将实现委托给它?