小编s1m*_*nw1的帖子

Kotlin中的reified关键字如何工作?

我试图了解reified关键字的目的,显然它允许我们对泛型进行反思.

但是,当我把它放在外面时它的效果一样好.任何人都在关心何时产生实际差异

generics kotlin kotlin-reified-type-parameters

98
推荐指数
3
解决办法
2万
查看次数

将Kotlin Array转换为Java varargs

如何将我的Kotlin转换Array为varargs Java String[]

val angularRoutings = 
    arrayOf<String>("/language", "/home")

// this doesn't work        
web.ignoring().antMatchers(angularRoutings)
Run Code Online (Sandbox Code Playgroud)

如何将ArrayList传递给varargs方法参数?

java interop kotlin kotlin-interop

93
推荐指数
1
解决办法
3万
查看次数

是什么?:在Kotlin做什么?(猫王运营商)

我无法弄清楚?:例如这种情况

val list = mutableList ?: mutableListOf() 
Run Code Online (Sandbox Code Playgroud)

为什么可以修改它

val list = if (mutableList != null) mutableList else mutableListOf()
Run Code Online (Sandbox Code Playgroud)

kotlin

64
推荐指数
8
解决办法
4万
查看次数

在Kotlin同时扩展和实施

在Java中,您可以执行以下操作:

class MyClass extends SuperClass implements MyInterface, ...
Run Code Online (Sandbox Code Playgroud)

可以在Kotlin做同样的事情吗?假设SuperClass是抽象的并且没有实现MyInterface

java kotlin

57
推荐指数
2
解决办法
2万
查看次数

Kotlin和Spring Boot @ConfigurationProperties

如何使用KotlinSpring Boot中正确初始化ConfigurationProperties ?

目前我喜欢以下示例:

 @ConfigurationProperties("app")
 class Config {
     var foo: String? = null
 }
Run Code Online (Sandbox Code Playgroud)

但它看起来很丑陋,实际上foo并不是一个var可行的,foo是不变的 val,应该在启动时初始化,并且将来不会改变.

spring kotlin spring-boot

33
推荐指数
7
解决办法
2万
查看次数

Kotlin:回归可以从"何时"解除

switch在Kotlin 的替代品是when.因此,在回收器视图适配器中,当我返回视图类型时,我使用when:

override fun getItemViewType(position: Int): Int {
    when (position) {
        0 -> return ItemViewType.TITLE.type
        1 -> return ItemViewType.SUBTITLE.type
        2 -> return ItemViewType.ITEM.type
        else -> return -1
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,上述声明发出了警告信息Return can be lifted out of 'when'.

有谁知道什么是正确的使用方式when?如何解决上述问题?

kotlin

30
推荐指数
3
解决办法
1万
查看次数

使用kotlin协同程序时,如何对调用挂起函数的函数进行单元测试?

我有这样的课

class SomeClass {
    fun someFun() {
        // ... Some synchronous code
        async {
            suspendfun() 
        }
    }

    private suspend fun suspendFun() {
         dependency.otherFun().await()
         // ... other code
    }
}
Run Code Online (Sandbox Code Playgroud)

我想进行单元测试,someFun()所以我编写了一个单元测试,如下所示:

@Test
fun testSomeFun() {
    runBlocking {
        someClass.someFun()
    }

    // ... verifies & asserts
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用,因为runBlocking实际上不会阻止执行,直到runBlocking内的所有内容都完成.如果我suspendFun()直接在里面测试runBlocking它按预期工作,但我希望能够一起测试someFun().

有关如何使用同步和异步代码测试函数的任何线索?

unit-testing coroutine kotlin kotlin-coroutines

23
推荐指数
1
解决办法
5378
查看次数

Gradle Kotlin DSL:在独特的地方定义Kotlin版本

为了描述Gradle构建脚本,我们可以使用Kotlin via build.gradle.kts文件.全局定义要使用 Kotlin版本是常见的问题,无论是dependencies在构建plugin部分还是在构建部分中(对于给定的案例,使用不同的版本是相当罕见的).

请考虑以下代码(Gradle 4.3.1):

plugins {
    var pluginVersion = "1.2.30"
    kotlin("jvm").version(kotlinVersion)
    // more
}

var dependencyVersion = "1.2.30"
dependencies {
    compile(kotlin("stdlib", kotlinVersion))
    compile(kotlin("reflect", kotlinVersion))
    testCompile(kotlin("test", kotlinVersion))
    // more
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,kotlin version(在这种情况下为1.2.30)定义了两次:dependencyVersion并且pluginVersion,通常没有区别.由于DSL限制,不可能pluginVersionplugins块外部访问或dependencyVersionplugins块内访问.

如何将版本字符串"1.2.30"提取到一个地方?

gradle kotlin build.gradle gradle-kotlin-dsl

19
推荐指数
3
解决办法
2334
查看次数

在kotlin中flatMap与地图的用例是什么?

https://try.kotlinlang.org/#/Kotlin%20Koans/Collections/FlatMap/Task.kt

它有使用flatMap和的样本map

似乎两者都在做同样的事情,是否有一个样本来显示使用flatMapmap?的区别?

数据类型:

data class Shop(val name: String, val customers: List<Customer>)

data class Customer(val name: String, val city: City, val orders: List<Order>) {
    override fun toString() = "$name from ${city.name}"
}

data class Order(val products: List<Product>, val isDelivered: Boolean)

data class Product(val name: String, val price: Double) {
    override fun toString() = "'$name' for $price"
}

data class City(val name: String) {
    override fun toString() = name
}
Run Code Online (Sandbox Code Playgroud)

样品:

fun Shop.getCitiesCustomersAreFrom(): …
Run Code Online (Sandbox Code Playgroud)

collections kotlin flatmap

15
推荐指数
2
解决办法
1万
查看次数

在Kotlin打印0001到1000.如何在数字中添加填充?

我想打印0001(注意前面的3个0),一次增量1,然后达到1000停止.我怎么能在Kotlin那样做,而不用复杂的自己附加0?

以下没有帮助,因为它不会有前面的0.

for (i in 1..1000) print(i)
Run Code Online (Sandbox Code Playgroud)

kotlin

14
推荐指数
5
解决办法
4003
查看次数