Tag: 科特林

在Kotlin死人的开关

我想在Kotlin实施一个死人的转换 。 在接收到最后一个MyEvent之后,它会触发一个TIME_INTERVAL秒的通知。 当收到一个新的MyEvent ,它重新启动定时器。 private val stopWatch = object : () -> Unit { var timer = System.currentTimeMillis() var isRunning = false override fun invoke() { timer = System.currentTimeMillis() if (isRunning) return synchronized(this) { isRunning = true while (System.currentTimeMillis() – timer <= TIME_INTERVAL) {} fireNotification() isRunning = false } } } override fun onSomeEvent(e: […]

Kotlin难以上传到推断的(现场)参数

我不确定是否“失败”是正确的话,但这是我面临的问题。 我花了相当长的时间来重现这个最小的例子,所以在这里: class BaseParameterizedType fun <U: BaseParameterizedType> getSpecific(clazz: KClass) : U { TODO() } fun example(arg: KClass<out BaseParameterizedType>)) { getSpecific(arg.innerType) } 好的,所以上面的代码在’TODO’失败,但是如果它不在那里,并且函数正常返回,那么它肯定会失败,并产生空指针exception。 我试图弄清楚什么是错误的,所以我转向了反编译的Java代码(来自kotlin字节码): public static final void example(@NotNull KClass arg) { Intrinsics.checkParameterIsNotNull(arg, “arg”); getSpecific(arg.getInnerType()); throw null; // <– The problem } 如果我将getSpecific(clz: KClass) : U的函数签名更改为以下任何一种forms: getSpecific(clz: KClass) : U getSpecific(clz: KClass) : U getSpecific(clz: KClass) […]

如何在Kotlin中创建一个无限长的序列

我正在寻找类似的东西 val allInts = (1..).asSequence() 所以我可以,例如 allInts.take(5)

Kotlin中的整数是否等于数学expression式?

我正在制作一个解决数学expression式的程序,例如2 + 2。 我可以设置一个整数等于这样的东西: val input = “2+2” input.toInt()

为什么不聪明处理这种情况呢?

我有一些类似于这个结构的代码: private fun test() : Double { val a : Double? = 15.0 val b : Double? = 20.0 return if (a == null && b == null) { 0 } else if (a != null && b == null) { a } else if (a == null && b != null) { b } […]

如何将Kotlin的默认属性值设置为`this`

我有下面的代表简单树的类结构。 每个项目可以有多个孩子和父母。 树根虽然让我头痛。 我想这样做,而不使用null所以我可以通过调用item.parent向上遍历树。 为了简化它,我希望根本身是一个父类,但是我不知道如何去做。 interface Item { val parent: Directory } interface ItemWithChildren{ val children: MutableList } class Directory() : Item, ItemWithChildren { override val children: MutableList = mutableListOf() override val parent: Directory by lazy { this } constructor(par: Directory) : this() { parent = par //Error: val cannot be reassigned } } class […]

映射,除非例外

我有一个表示串行化数据的String列表,我想map到一个对象列表。 我使用下面的代码: strings.map { gson.fromJson(it, Model::class.java) } // .doOtherStuff 但是,有时会出现解析错误,而流只是停止,我希望能够恢复列表直到失败。 例如,如果在项目7发生错误,我想doOtherStuff获得成功处理的6个项目。 什么是最习惯的方式来做到这一点? 我可以过滤列表,看看解析是否会成功,但这是一个昂贵的操作正在做两次。

Kotlin:一个抽象的超类有一个抽象的构造函数吗?

我刚刚写了这样的文字,尽管如此, import com.github.salomonbrys.kotson.get import com.github.salomonbrys.kotson.int import com.github.salomonbrys.kotson.jsonObject import com.google.gson.JsonElement import com.google.gson.JsonObject abstract class BatchJobPayload { abstract fun toJson(): JsonObject } class BookingConfirmationMessagePayload(val bookingId: Int) : BatchJobPayload() { constructor(payload: JsonElement) : this(payload[“bookingId”].int) override fun toJson() = jsonObject( “bookingId” to bookingId ) } 但是我想坚持,如果可能的话,扩展BatchJobPayload所有类BatchJobPayload实现一个带有签名constructor(payload: JsonElement): BatchJobPayload的二级构造constructor(payload: JsonElement): BatchJobPayload ,它将用于反序列化。 BookingConfirmationMessagePayload有这样的构造函数,但只是因为我把它放在那里,不是因为BatchJobPayload坚持它…

从列表中重建N元树

data class Node(val ID : Long, val name : String) 我有以下三个值(按照外观顺序)的有序列表:ID,名称和深度。 0000 : A : 0 0001 : B : 1 0002 : C : 2 0003 : D : 2 0004 : E : 1 0005 : F : 2 0006 : G : 1 0007 : H : 1 0008 : I : […]

Koltingenerics声明 – 站点方差构造

我正在阅读kotlin没有通配符的原因( https://kotlinlang.org/docs/reference/generics.htm l)。 这一切都来到声明网站的变化。 我们有和结构应该取代通配符。 我想我明白了是如何运作的,但我却在遇到麻烦。 所以在java中,我们可以这样写: public List list1; public List list2; 初始化后的第一种情况变成只读列表(虽然不是完全不可改变的原因,我们可以清除它),如果我们把每个元素都视为数字,就可以读取它们。 第二种情况是只写(尽管我们可以阅读它,如果我们把每个元素作为对象)。 我们可以写那里字符串和它的子类。 在Kotlin中,我能够像这样使用重新创建list1示例: class Service { val container = Container(mutableListOf(“1”, “2”, “3”)) } class Container(var list1: MutableList) 最后我尝试了一些类似于东西,认为我可以重新创建list2的例子,但是我失败了: 有人可以向我解释如何在Kotlin中实现我的list2例子吗? 我应该如何正确使用结构?