Kotlin 传递对未实例化的类的引用
在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
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函数。这是我第一次看到它用来传递类引用。它不传递类引用。它传递了一个构造函数引用。我假设如果你有多个构造函数,这个解决方案就不起作用了?你可以试试看。是的,它会起作用,因为它会推断出要引用的构造函数(没有参数的构造函数)