小编Lor*_*one的帖子

如何在Kotlin中将List转换为Map?

例如,我有一个字符串列表,如:

val list = listOf("a", "b", "c", "d")
Run Code Online (Sandbox Code Playgroud)

我想将它转换为地图,其中字符串是键.

我知道我应该使用.toMap()函数,但我不知道如何,我还没有看到它的任何例子.

dictionary kotlin

146
推荐指数
5
解决办法
5万
查看次数

Kotlin lateinit属性,NPE危险吗?

我正在使用lateinit属性,以避免连续的空值检查?运营商.我有很多在getViews()函数中第一次分配的View属性.如果那个函数不存在,我的应用程序将从一个NPE,从Kotlin代码崩溃.

在我看来,lateinit属性基本上破坏了语言的漂亮的空安全功能.我知道它们是在M13中引入的,因为它有更好的框架支持,但是它值得吗?

或者我在这里遗漏了什么?

这是代码:

package com.attilapalfi.exceptional.ui

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import com.attilapalfi.exceptional.R
import com.attilapalfi.exceptional.dependency_injection.Injector
import com.attilapalfi.exceptional.model.Exception
import com.attilapalfi.exceptional.model.ExceptionType
import com.attilapalfi.exceptional.model.Friend
import com.attilapalfi.exceptional.persistence.*
import com.attilapalfi.exceptional.rest.ExceptionRestConnector
import com.attilapalfi.exceptional.ui.helpers.ViewHelper
import com.attilapalfi.exceptional.ui.question_views.QuestionYesNoClickListener
import com.google.android.gms.maps.MapView
import java.math.BigInteger
import javax.inject.Inject

public class ShowNotificationActivity : AppCompatActivity(), QuestionChangeListener {
    @Inject
    lateinit val exceptionTypeStore: ExceptionTypeStore
    @Inject
    lateinit val friendStore: FriendStore
    @Inject
    lateinit val imageCache: ImageCache
    @Inject
    lateinit val metadataStore: MetadataStore
    @Inject
    lateinit val viewHelper: ViewHelper
    @Inject
    lateinit val exceptionInstanceStore: ExceptionInstanceStore
    @Inject …
Run Code Online (Sandbox Code Playgroud)

android kotlin

14
推荐指数
2
解决办法
4259
查看次数

生成Kotlin类图

我正在寻找一个工具,Intellij Idea插件,或任何能够从Kotlin源文件生成UML类图的工具.

Intellij Idea 15的"显示图..."工具仅适用于.java文件.

谷歌没有帮助,但我仍然希望有机会为此找到一个工具.

uml kotlin

11
推荐指数
1
解决办法
4990
查看次数

在Kotlin中取最后n个元素

我有一个列表,我要对其进行一些转换,但不包括前两个元素。我怎样才能做到最好?像这样:

list.reversed().take(list.size - 2)...(my transformations)
Run Code Online (Sandbox Code Playgroud)

要么

list.excludeFirstN(2)...(my transformations)
Run Code Online (Sandbox Code Playgroud)

functional-programming kotlin

6
推荐指数
2
解决办法
2059
查看次数

Kotlin中的包等效可见性修饰符

我正在编写一个程序,我正在使用工厂模式.我有一个名为AssetFundCalculator的接口和一个名为AssetFundCalculatorImpl的类,它实现了该接口.

AssetFundValidator类验证一些投入,并能实例化一个有效AssetFundCalculatorImpl.

我想如果程序的其余部分只知道接口,而不是AssetFundCalculatorImpl,那么只有AssetFundValidator可以实例化它.

我的包结构如下所示:

在此输入图像描述

在Java中,我会将包可见性修饰符赋予AssetFundCalculatorImpl类或它的构造函数,它可以解决问题,但在Kotlin中,没有包可见性修饰符.

这个问题有方法解决吗?我不想将此代码放到单独编译的模块中,因此内部修饰符不起作用.

java kotlin

6
推荐指数
1
解决办法
897
查看次数

由于val属性,无法从init块调用函数

我想初始化我班级的属性.因为我大量使用Kotlin的功能元素,所以我想将这些初始化放在命名良好的函数中,以提高代码的可读性.问题是我不能分配val属性,如果代码不在init块中,而是在从init块调用的函数中.

如果属性是val,是否可以将类的初始化拆分为不同的函数?

这是代码:

    val socket: DatagramSocket = DatagramSocket()
    val data: ByteArray = "Cassiopeiae server discovery packet".toByteArray()
    val broadcastAddresses: List<InetAddress>

    init {
        socket.broadcast = true
        val interfaceAddresses = ArrayList<InterfaceAddress>()
        collectValidNetworkInterfaces(interfaceAddresses)
        collectBroadcastAddresses(interfaceAddresses)
    }

    private fun collectValidNetworkInterfaces(interfaceAddresses: ArrayList<InterfaceAddress>) {
        NetworkInterface.getNetworkInterfaces().toList()
                .filter { validInterface(it) }
                .forEach { nInterface -> nInterface.interfaceAddresses.toCollection(interfaceAddresses) }
    }

    private fun collectBroadcastAddresses(interfaceAddresses: ArrayList<InterfaceAddress>) {
        broadcastAddresses = interfaceAddresses
                .filter { address -> address.broadcast != null }
                .map { it.broadcast }
    }
Run Code Online (Sandbox Code Playgroud)

当然它没有编译,因为collectBroadcastAddresses函数试图重新分配broadcastAddresses val.虽然我不想把这个函数的代码放到init块中,因为代码在做什么并不明显,而且函数名称非常好.

在这种情况下我该怎么办?我想保持我的代码干净,这是最重要的一点!

coding-style kotlin

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

函数在Kotlin中返回ad-hoc对象

目前我有一个返回Pair<User, User>对象的私有函数.第一个用户是某个东西的发送者,第二个用户是该东西的接收者.

我认为这Pair<User, User>还不够自我解释 - 或者如果你喜欢的话也很干净 - 尽管它只是一个私人功能.

是否可以使用这样的ad-hoc对象返回:

private fun findUsers(instanceWrapper: ExceptionInstanceWrapper): Any {
    return object {
        val sender = userCrud.findOne(instanceWrapper.fromWho)
        val receiver = userCrud.findOne(instanceWrapper.toWho)
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用返回值,如下所示:

// ...
val users = findUsers(instanceWrapper)
users.sender // ...
users.receiver // ...
// ...
Run Code Online (Sandbox Code Playgroud)

如果没有,Kotlin的临时对象有什么意义?

kotlin

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