Tag: 科特林

Kotlin或Swift能够像Javascript一样解析JSON吗?

如果我使用JavaScript(或TypeScript),我可以做以下(只是想法); object = JSON.parse(jsonString) 而且我可以像这样使用它, alert(object.property); 超级简单。 如果我使用Java,我需要创建类并解析它来使用它。 我明白。 Kotlin和Swift怎么样? 他们有可选的types,为什么单行,类似Javascript的简单解析不存在,或者它呢? (甚至没有数据类或通过JSON的属性)

如何在Kotlin中创建一个线程池

我想在Kotlin创建一个线程池。 我一直在互联网上搜索几个小时,我不能得到一个例子。 任何人都可以提供示例 谢谢。

使用范围的稀疏值列表

有没有更简洁的写作方式? listOf(‘a’..’z’,’A’..’Z’).flatMap { it } 这里的想法是遍历一个范围内的一些值,如从1到100的数字,从21跳过到24 listOf(1..20, 25..100).flatMap { it }

在Kotlin中使用传递给分支条件的参数?

我有一些代码大致看起来像这样: val myObject = myObjectRepository.findById(myObjectId); when { matchesSomething(myObject) -> doSomethingWithMyObject(myObject) matchesSomethingElse(myObject) -> doSomethingElseWithMyObject(myObject) else -> log.warn(“No match, aborting”); } 虽然这个工程,我会认为,以下(这是行不通的)将是一个改进,如果我只需要访问myObject范围内的when : when(myObjectRepository.findById(myObjectId)) { myObject -> matchesSomething(myObject) -> doSomethingWithMyObject(myObject) matchesSomethingElse(myObject) -> doSomethingElseWithMyObject(myObject) else -> log.warn(“No match, aborting”); } 我在这里得到的错误是: 未解决的参考:myObject 你能在Kotlin做这样的事吗?如果是的话,怎么样? 如果不是的话,为什么不应该允许这个原因呢?

修正genericstypes到第一个参数的types

我想写一个扩展函数,它将在任何types和接受相同types或子types的参数,但不是一个完全不同的types。 我尝试过天真的做法,但没有奏效: fun Tf(x: T) { } fun main(args: Array) { “1”.f(“1”) // ok “1”.f(1) // should be error } 看来,编译器只是使用任何的T我想T被固定为接收器types。

为什么我被迫使用! 在空检查的组合?

对于这段代码,Kotlin迫使我处理一个空检查的情况,而在另一个情况下,它不是这样,尽管情况相同: if (r1 == null && r2 == null) throw IllegalArgumentException(“All nulls!”) else if (r1 == null) return r2!!.reading // <—– I am forced to !! here else if (r2 == null) return r1.reading // <—– The compiler does not complain in this line 这是一个错误还是一个function?

只计算一次属性

给出以下代码 class A class B { val property: A get() = A() } fun main(args: Array) { val b = B() println(b.property) println(b.property) } 它每次返回一个新的A实例B.property 。 是否有简单的方法让它每次都返回相同的实例?

为什么加号需要在行尾,而不是在下一行的开头?

在Kotlin中,如果您想要添加expression式来跨越多行,则需要将加号放在行尾,而不是开头。 例如: var a = 1 var b = 2 var c = 3 var d = a + b + c println(d) // prints “6” var e = a + b + c println(e) // prints “1” 据我所知,这是因为Kotlin把第二个例子解释为三个单独的陈述,就像这样: var e = a + b + c 但我还没有find任何文件说明为什么+ somevariable某些变化本身是一个有效的陈述。 它不增加variables,而println(+somevariable)打印与println(somevariable)相同的值。

在Kotlin的generics中扩展类

我试图用简单的构造函数来实现这个枚举,如下所示: enum class WithGraphicKind(val innerClass: Class) { CONTACT(Contact::class.java), SALE(Sale::class.java); } 由于Contact和Sale类都实现了一个公共接口WithGraphics ,所以我想输入构造函数为innerClass: Class ,但是这不起作用。 我也试过Class和其他类似的东西,但没有任何作用。 我在这里的官方文档中也找不到任何提示: https : //kotlinlang.org/docs/reference/generics.html

Kotlin,实例化问题和generics

我有一个类Vec3i延伸Vec3t data class Vec3i( override var x: Int = 0, override var y: Int = 0, override var z: Int = 0 ) : Vec3t(x, y, z) 作为一个次要的构造如下 constructor(v: Vec3t) : this(vxtoInt(), vytoInt(), vztoInt()) 和另一个Vec3ub类,Vec3t总是延伸 data class Vec3ub( override var x: Ubyte = Ubyte(0), override var y: Ubyte = Ubyte(0), override var z: Ubyte = […]