小编s1m*_*nw1的帖子

Kotlin Coroutines:我们需要同步共享状态吗?

从官方指南和来自Web的示例中,我没有看到任何锁定同步的提及,或者在多个launchasync调用中修改共享变量的安全性.

kotlin

4
推荐指数
1
解决办法
1597
查看次数

使用 Kotlin 的 `let` 的合理情况

在 Kotlin 中,let如果对象(let接收者)不是null,则执行代码是很常见的,作为if != null检查的替代方法,如下所示:

val nullable: String? = "anything"
nullable?.let {
    println(it)
}
Run Code Online (Sandbox Code Playgroud)

在其他什么情况下使用let?

仅供参考,let是 Kotlin 标准库的一部分,定义如下:

@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
Run Code Online (Sandbox Code Playgroud)

android kotlin

4
推荐指数
1
解决办法
1342
查看次数

使用moshi转换HashMap

我正在尝试将一个HashMap元素转换为JSON字符串.我正在使用此链接中使用的方法.

 val elementsNew: HashMap<String, Element> = HashMap(elements)
 val type = Types.newParameterizedType(Map::class.java, String::class.java, Element::class.java)
 var json: String = builder.adapter(type).toJson(elementsNew)
Run Code Online (Sandbox Code Playgroud)

但这会产生以下错误

错误:(236,40)类型推断失败:没有足够的信息来推断有趣适配器中的参数T(p0:Type!):JsonAdapter!请明确说明.

谁能告诉我哪里出错了?是因为Kotlin吗?

android kotlin moshi

4
推荐指数
1
解决办法
3113
查看次数

检查成员/属性的类型

假设我有任何课程,比如这个课程:

class SomeClass(val aThing: String, val otherThing: Double)
Run Code Online (Sandbox Code Playgroud)

然后我用反射来分析这个类的字段:

for(field in SomeClass.declaredMemberProperties){

}
Run Code Online (Sandbox Code Playgroud)

如何查看每个字段的类型?

reflection types kotlin

4
推荐指数
1
解决办法
1249
查看次数

Kotlin:找到收藏中最常见的元素

我正在编写一个迭代一个集合的函数,并找到其中最常见的项目.

以下是我到目前为止获取值并添加它们在集合中出现的次数.我将值作为键放在地图中,并将其显示为其值的次数.

fun mostCommon(input: Collection<Int>): Set<Int> {
    var newMap: MutableMap<Int, Int> = HashMap()
    for (item in input) {
        if (newMap.containsKey(item)) {
            //TODO: add 1 to value if key is found
        }else {
            newMap.put(item, 1)
        }
    }
    return emptySet()
}
Run Code Online (Sandbox Code Playgroud)

如果密钥已存在,我无法找到将值加1的方法.

我试过这样做:

newMap[item] +=1
Run Code Online (Sandbox Code Playgroud)

但我得到一个关于plusAssign(1)的错误,不允许在Nullable接收器上.

hashmap kotlin

4
推荐指数
2
解决办法
2440
查看次数

如何在Kotlin中使用XOR

我想执行XOR来查找两个布尔值a和b中的一个是否为真,但不是两个.在Kotlin中搜索XOR给了我这个答案

infix fun xor(other: Boolean): Boolean

在此布尔值与另一个布尔值之间执行逻辑xor运算.资源

我仍然对如何实现这一点感到困惑

kotlin

4
推荐指数
2
解决办法
3439
查看次数

kotlin - 传递方法参考功能

假设我有以下Java类:

public class A {
   public Result method1(Object o) {...}
   public Result method2(Object o) {...}
   ...
   public Result methodN(Object o) {...}
}
Run Code Online (Sandbox Code Playgroud)

然后,在我的Kotlin代码中:

fun myFunction(...) {
    val a: A = ...
    val parameter = ...
    val result = a.method1(parameter) // what if i want methodX?
    do more things with result
}
Run Code Online (Sandbox Code Playgroud)

我希望能够选择在里面调用哪个methodX myFunction.在Java中,我会将其A::method7作为参数传递并调用它.在Kotlin它没有编译.我应该如何在Kotlin解决它?

reflection jvm kotlin method-reference

4
推荐指数
1
解决办法
2216
查看次数

kotlin,可以调用null.also {}

有代码如:

result.also{......}
Run Code Online (Sandbox Code Playgroud)

但是result可能是null并且编译器没有抱怨,它是相同的

null.also{...}
Run Code Online (Sandbox Code Playgroud)

是否确定打电话also{}null

generics nullable kotlin

4
推荐指数
1
解决办法
132
查看次数

春季MVC Thymeleaf Kotlin

我正在尝试将表单传递给控制器​​,但对象为空(看起来像从默认构造函数而不是从表单获取值)。而且不知道为什么@Valid不起作用。

码:

终点

    @PostMapping("/add") 
fun addDevice(@Valid @ModelAttribute device: Device, model: ModelMap): ModelAndView {
    deviceRepository.save(device)
    return ModelAndView("redirect:/devices/all", model)
}
Run Code Online (Sandbox Code Playgroud)

实体:

@Entity
data class Device(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Int? = null,
        @NotNull
        val name: String? = "",
        @Min(10)
        @Max(30)
        val price: Int? = null,
        @Size(min = 8)
        val secretPhrase: String? = ""
) : Serializable
Run Code Online (Sandbox Code Playgroud)

形成

<h1>Add Device</h1>
    <!--/*@thymesVar id="device" type="com.example.demo.Device"*/-->
    <form action="#" th:action="@{/devices/add}" th:object="${device}" th:method="post">
        <div class="col-md-12">
            <label>Name Cannot Be Null</label>
            <input type="text" minlength="1" th:field="*{name}"></input>
        </div> …
Run Code Online (Sandbox Code Playgroud)

model-view-controller spring kotlin thymeleaf

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

Kotlin 上限:`:Any` 对 Kotlin 的泛型类型推断有什么影响?

Kotlin for Android Developers本书中,我们遇到的扩展功能

fun <T:Any> SelectQueryBuilder.parseList(parser: (Map<String,Any?>) -> T):List<T> = parseList(object:MapRowParser<T>{
    override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
})
Run Code Online (Sandbox Code Playgroud)

而且我不确定为什么这:Any是必要的。

如果我把它写成fun <T> SelectQueryBuilder.parseList(...),Android Studio 会抱怨

错误信息

而当您添加:Any后,该错误就会消失。

现在,就我而言,T应该暗示T:Any,尽管显然情况并非如此。这是为什么?它有什么区别?

generics android types type-inference kotlin

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