在 Kotlin 中将 StringBuilder::append 作为参数传递

Passing StringBuilder::append as argument in Kotlin

我正在使用 BIP39 plugin 为 Java 创建助记符。 所以我已经将(大部分是 IDEA 所做的)this Java code 转换为 Kotlin 语法中的函数,如下所示:

fun mnemonicBuilder(): String {
  val sb = StringBuilder()
  val entropy = ByteArray(Words.TWELVE.byteLength())
  SecureRandom().nextBytes(entropy)
  MnemonicGenerator(English.INSTANCE)
      .createMnemonic(entropy, sb::append)
  return sb.toString()
}

IntelliJ IDEA 一直告诉我“None 可以使用提供的参数调用以下函数。”对于 sb::append.

我的问题是 .createMnemonic requires the second argument to have no return value (given by Target interface) 但所有附加程序 return StringBuilder 作为一个值。

拜托,有人可以帮助我吗?

确实,参数签名不匹配。您可以使用 lambda 代替方法参考来解决它:

MnemonicGenerator(English.INSTANCE)
    .createMnemonic(entropy) { sb.append(it) }