我看到我的朋友在他的代码库中这样做了,但我正在努力弄清楚如何在我的班级中做到这一点。
假设我有以下代码:
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>
我该如何修复此代码以便我只需要使用
::
??
支持函数参数,但不支持变量/属性赋值。
但我认为你可以做到:
val compiler = JobTest.JobCompiler(::Job)
因此您将其用作函数参数(用于构造函数接口的隐式创建函数的参数)并然后分配它。