Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 传递对未实例化的类的引用_Kotlin - Fatal编程技术网

Kotlin 传递对未实例化的类的引用

Kotlin 传递对未实例化的类的引用,kotlin,Kotlin,在Kotlin中,我有一个类,我希望将该类的引用传递给将该引用作为参数的函数。该函数将创建该类的一个实例。我不知道如何定义函数的参数或如何传递对类的引用。例如: class User { var name: String = "" } fun processUser(userClass: User) { // Create an instance of User val user = userClass() user.name = "John Doe" } // Call t

在Kotlin中,我有一个类,我希望将该类的引用传递给将该引用作为参数的函数。该函数将创建该类的一个实例。我不知道如何定义函数的参数或如何传递对类的引用。例如:

class User {
  var name: String = ""
}

fun processUser(userClass: User) {
  // Create an instance of User
  val user = userClass()
  user.name = "John Doe"
}

// Call the function. Something like this...
processUser(User.java)

我知道这可以使用KClass来完成,但我想知道是否可以使用我想要实例化的特定类来完成,在本例中是User。

您的
processUser()
函数目前期望的是User的实例。您实际想要接收的是一个创建用户的函数。应该如此

fun processUser(userSupplier: () -> User) {
    // Create an instance of User
    val user = userSupplier()
    user.name = "John Doe"
}

fun main() {
    processUser { User() }
    // or simply via a constructor reference
    processUser(::User)
}

您的
processUser()
函数目前期望的是用户的实例。您实际想要接收的是一个创建用户的函数。应该如此

fun processUser(userSupplier: () -> User) {
    // Create an instance of User
    val user = userSupplier()
    user.name = "John Doe"
}

fun main() {
    processUser { User() }
    // or simply via a constructor reference
    processUser(::User)
}

令人惊叹的。我只习惯于看到lambda在作为参数传递时被用作lambda函数。这是我第一次看到它用来传递类引用。它不传递类引用。它传递了一个构造函数引用。我假设如果你有多个构造函数,这个解决方案就不起作用了?你可以试试看。是的,它可以工作,因为它可以推断出您想要引用哪个构造函数(没有参数的构造函数)。我只习惯于看到lambda在作为参数传递时被用作lambda函数。这是我第一次看到它用来传递类引用。它不传递类引用。它传递了一个构造函数引用。我假设如果你有多个构造函数,这个解决方案就不起作用了?你可以试试看。是的,它会起作用,因为它会推断出要引用的构造函数(没有参数的构造函数)