Tag: 科特林

如何命名一个线程?

我怎样才能命名这个Thread ? override val t: Thread = Thread { try { transmit() } catch (e: Exception) { println(“Transmitter throws exception: $e”) } }

带参数的单身人士在Kotlin

我正在尝试将Android应用程序从Java转换为Kotlin。 应用程序中有几个单身人士。 我没有构造函数参数的单身人士使用伴侣对象。 还有另外一个单例需要一个构造函数参数。 Java代码: public class TasksLocalDataSource implements TasksDataSource { private static TasksLocalDataSource INSTANCE; private TasksDbHelper mDbHelper; // Prevent direct instantiation. private TasksLocalDataSource(@NonNull Context context) { checkNotNull(context); mDbHelper = new TasksDbHelper(context); } public static TasksLocalDataSource getInstance(@NonNull Context context) { if (INSTANCE == null) { INSTANCE = new TasksLocalDataSource(context); } return INSTANCE; } } 我在kotlin的解决方案: […]

在多个接收器上调用一个通用的方法

通常情况下,我有以下模式: ax() ay() az() Kotlin提供了一个方便的选择: a.run { x(); y(); z() } 有时我有这样的模式: ax() bx() cx() 我想写这样的东西: applyTo(a, b, c) { it.x() } 所以我可能会执行以下操作: fun applyTo(vararg ps: P, fx: (P) -> Unit) = ps.forEach { fx(it) } 或者,像这样的东西: ::x.eachOf(a, b, c) 所以我可以实现这个function: fun ((P) -> R).eachOf(vararg p: P) = p.forEach { this(it) } 有没有办法使用标准库在多个接收器上调用共享方法,或者缩短模式#2的更好方法?

Kotlin null来自Java

当我将Java代码从一个库转换为Kotlin时,我会看到Java代码中是否存在空值检查,并想知道如何最好地将其转换。 我仍然需要在Kotlin的空检查,因为我不能控制,如果Java将使对象为空? 比方说,我有一个CameraDevice可以从Java返回null 我应该如何定义这个 private lateinit var mCameraDevice: CameraDevice 然后不需要空检查或像这样.. private var mCameraDevice: CameraDevice? = null 然后保持空的检查 if (mCameraDevice != null) { // do something } Kotlin的可玩性让我感到困惑,因为我觉得我不应该处理null,并且应该使用选项1,但是基本上我使用的每个库都是Java,所以我必须处理空值,并且使用选项2

Kotlin对象。 哪种方式的初始化是正确的?

对象初始化有什么区别吗? 时间字段会有不同的行为还是只是在Java(拆分声明和初始化)相同? 谢谢 object DataHolder { val time : MutableList init { time = arrayListOf() } … 和这个 object DataHolder { val time = arrayListOf() ….

Kotlin:超级构造函数中所做的更改被覆盖

我很难理解Kotlin实际上在做什么: 我的unit testing看起来像这样: @Test fun testReadCursorRequest() { val xml = fromFile() val parser: ReadCursorRequestParser = ReadCursorRequestParser(xml) assertEquals(0, parser.status) assertEquals(134, parser.contacts!!.size) } 我的解析器看起来像这样 abstract class EnvelopeParser(val xml: String) { abstract fun parseResponse(response: Element) init { parseResponse(xmlFromString(xml)) } // non-related stuff } class ReadCursorRequestParser(xml: String) : EnvelopeParser(xml) { var contacts: List = mutableListOf() override fun parseResponse(response: Element) […]

有没有办法迭代一个数据类的所有领域,而不使用reflection?

我知道使用javassist的reflection选择,但使用javassist有点复杂。 而且由于lambda或者koltin中的一些其他特性,javassist有时候不能正常工作。 那么有没有其他的方法来迭代数据类的所有领域,而不使用reflection。 (我不是以英语为母语的人,如果在词语之间有任何错误,请忽略它们)

使用特定字符串从集合中过滤数据

我只想收到不包含某些特定字符串的数据。 我有这个代码: @GET @Path(“getParticipants”) @Produces(MediaType.APPLICATION_JSON) fun getParticipants(): Map<String, List> { val (nodeInfo, nodeUpdates) = rpcOps.networkMapFeed() nodeUpdates.notUsed() return mapOf(“getParticipants” to nodeInfo .map { it.legalIdentities.first().toString() } .filter { it != myLegalName && it !in NOTARY_NAMES }) } 上面运行这个代码时,我收到这个: 0 “C=GB,L=London,O=UserA” 1 “C=GB,L=London,O=Controller” 2 “C=US,L=New York,O=UserB” myLegalName =“UserA” NOTARY_NAMES =“控制器” 我想达到的是,getParticipants只检索不包含UserA(“myLegalName”)和NOT CONTAINING Controller(“NOTARY_NAMES”)的行,所以在这种情况下只有“C = US,L = New York […]

开发lambdaexpression式

var t = 0 fun sumIntMap(hm: HashMap) = hm.forEach{ x -> t+=x.value }.let { t } 试图在这里用一个函数来总结一个HashMap Int值,我似乎无法优化它,所以它不需要捕获和需要临时var(t)。 我如何使用lambda中的临时variables并返回? 是我如何写它唯一真正的方法(使用let来返回临时variables)? 谢谢!

当对象应该返回自己的修改副本时,是否有可能避免代码重复?

我目前正在写一些代表符号数学expression式的类。 所有这些都是不变的。 然而,我发现自己经常重复同样的结构,所以我创建了一个接口来避免重复,但发现自己无法避免重复“substituteInside”方法(见下文),该方法返回对象的副本, “find”替换为“replace”。 这个行为对于这个接口的所有实例是一样的。 在我目前的解决方案中,接口需要实现一个方法createOp ,它返回对象的修改副本。 interface UnarySymbolicOp<InType : Any, OutType : Any, OpType : UnarySymbolicOp> : Symbolic { // Arg may be a complex expression val arg: Symbolic fun createOp(mesh: Symbolic) : OpType override val variables get() = arg.variables override fun substituteInside(find: Symbolic, replace: Symbolic): OpType { return createOp(arg.substitute(find, replace)) } } 接口可以实现如下:这些类表示获取expression式的某个组件的操作。 […]