如何将一个二维数组作为parameter passing给Kotlin中的一个函数

import java.io.* import java.util.* fun main(args: Array) { val sc = Scanner(System.`in`) var grid = Array(9, {IntArray(9)}) for(i in 0..grid.size – 1) { var rowArray = IntArray(9) for(j in 0..rowArray.size – 1) { rowArray[j] = sc.nextInt() } grid[i] = rowArray } for(row in grid) { for(j in row) { print(j) print(” “) } println(“”) } […]

使用参数化函数实现接口

假设我有一个接口 interface A { fun calculate(n: Int): Int } 我想在类B实现A (比如说),以便在B的构造函数中提供calculation ,如下所示: class B (f : (Int) -> Int) : A { override fun calculate(n: Int): Int //…somehow assign f to calculate } 这可以做到没有B的财产吗? 嗯…这个作品: interface A { val calculate: (n: Int) -> Int } class B(f: (Int) -> Int) : A { override val […]

我怎样才能直接从Kotlin源使用Java String方法(split)?

做一些分析,看来我的瓶颈是Kotlin kotlin.CharSequence.split()扩展函数。 我的代码只是做这样的事情: val delimiter = ‘\t’ val line = “example\tline” val parts = line.split(delimiter) 你可能会注意到, parts是一个List 。 我想直接使用Java的split进行基准测试,它会返回一个String[]并且效率可能更高。 如何直接从Kotlin源码调用Java的String::split(String) ?

在Kotlin接收器对象和扩展

我试图熟悉更先进的kotlinfunction,但我不知道为什么我的小代码示例编译和打印“测试A”,而不是打印“测试B”。 有人可以告诉我为什么测试B不打印? class One{ fun delegate(operation: One.()-> Unit){ operation() } fun main(args: Array){ val one= One() fun One.doIt(){ println(“Test A”) } one.delegate { doIt() } //prints Test A one.delegate { fun One.doItDifferently(){ println(“Test B”) //not printed } } }

增量会导致构建失败

import Foo.x object Foo { var x = 5 } fun main(args: Array) { ++x // or x += 1 } 当我尝试编译它时,我得到这个错误 。 但是,当我用x = x + 1替换++x ,一切都编译得很好。 我对这个语言很陌生,不明白是什么问题。 这是一个预期的行为还是需要一个错误报告?

在Kotlin中访问同一类的不同实例的字段

考虑这个Kotlin代码: var parent: T? = null get() = if (isParent) this as T else field set(value) { field = if (value == null) null else value.parent } val isParent: Boolean get() = parent == null var description = “” get() = if (isParent) field else parent!!.description set(value) { if (isParent) field = value else parent!!.description […]

比较没有ID的Kotlin中的数据类

我在Kotlin有一个数据类,它有多个属性,其中之一就是ID 。 但是当我真的在代码中使用compare函数时,我想在比较时排除这个ID属性。 有什么办法做,除了手动锅炉comparefunction?

阅读行并在最后添加一些内容

我是kotlin新手。 我试图逐行读取文件,并在每个文件末尾添加一些内容。 我的文件在阅读之前: abcd;abcd;abcd; bcda;bcda;bcda; dacb;dacb;dacb; 我的文件阅读和追加后: abcd;abcd;abcd;smth1 bcda;bcda;bcda;smth2 dacb;dacb;dacb;smth3 我有一行一行地阅读文件的代码,但你能告诉我如何将字符串添加到每个? val pathToFile = “abc.txt” val scan = Scanner(File(pathToFile)) while (scan.hasNextLine()) { val line = scan.nextLine() var lista = ArrayList() lista = line.split(“;”) as ArrayList println(lista.get(0) + ” and ” + lista.get(1) + ” and ” + lista.get(2)) }

Kotlin使用适用于伴侣对象会引发意外错误

比方说,我想通过复制类B值来实例化类A的一个对象,例如,映射DTO的时候这是很常见的做法。 要在Java或Groovy中实现这一点,我会创建一个静态方法在相应的DTO上签名fromB(A a) ,然后在Java中使用a.with { val = b.val… } a.val = b.val…或使用a.with { val = b.val… }在Groovy中。 在Kotlin中,我注意到instance.apply{}与Groovy非常相似,它允许我直接访问对象variables,而不必一直引用对象本身,因为引用似乎隐含在闭包中。 然而,当在同伴对象中使用apply时,我遇到了一个奇怪的和意想不到的错误。 如果我在A的伴侣对象的函数中使用A().apply {} ,我得到一个错误Expression is inaccessible from a nested class ‘Companion’, use ‘inner’ keyword to make the class inner变得很奇怪,因为我打电话直接应用于对象的一个​​实例,并因此期望我应该总是能够访问它的公共属性。 更何况,似乎伴侣对象不能被设置为inner因此错误信息中的建议并不是太有帮助。 以下是完整的示例代码: fun main(args: Array) { val b = B(“Hello”, “World”) val a = A.fromB(b) print(“$a.value1 $a.value2”) } […]

匕首不能提供注射Kotlin

当我尝试使用Kotlin和Dagger 2时,我有这个问题。 “接口不能提供@提供或@产生注释的方法”。 这是我的Module类: @Module class MenuActivityModule(@NonNull private val menuActivity: MenuActivity) { @Provides @MenuActivityScope fun provideGameScreenDimensions(application: Application) = GameScreenDimension(application.resources) @Provides @MenuActivityScope fun provideAudio() = AndroidAudio(menuActivity) @Provides @MenuActivityScope fun providePowerManager() = menuActivity.getSystemService(Context.POWER_SERVICE) as PowerManager @Provides @MenuActivityScope fun provideWakeLock(@NonNull powerManager: PowerManager) = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Preferences.APPLICATION_TAG) } This is a part of my Activity class, where I inject some […]