Kotlin:将构造函数传递给函数式接口

问题描述 投票:0回答:1

我看到我的朋友在他的代码库中这样做了,但我正在努力弄清楚如何在我的班级中做到这一点。

假设我有以下代码:

class JobTest {
  fun interface JobCompiler {
    fun compile(s: String, l: Long): Job
  }
  data class Job(val name: String, val id: Long)
}

fun main() {
  val compiler = JobTest.JobCompiler { s: String, l: Long -> JobTest.Job(s, l) }
  val job = compiler.compile("Tom", 100)

  println("Name: ${job.name}, Id: ${job.id}") // Prints Name: Tom, Id: 100
}

这编译并工作正常,但我正在阅读另一个类的示例,其中他们能够仅通过

::Job
,并推断其他两个变量。意思是,他们可以写:

  val compiler: JobTest.JobCompiler = ::Job

但是,当我尝试上述操作时,出现以下编译器错误:

Type mismatch. Required: JobTest.JobCompiler Found: KFunction2<String, Long, JobTest.Job>

我该如何修复此代码以便我只需要使用

::
??

kotlin generics constructor functional-interface
1个回答
0
投票

支持函数参数,但不支持变量/属性赋值。

但我认为你可以做到:

val compiler = JobTest.JobCompiler(::Job)

因此您将其用作函数参数(用于构造函数接口的隐式创建函数的参数)并然后分配它。

© www.soinside.com 2019 - 2024. All rights reserved.