使用反射时如何return特定的构造函数?
How to return a specific constructor when using reflection?
我正在阅读以下文档:Constructor References
解释了如何将引用发送到构造函数。但是他们没有描述存在多个构造函数(重载构造函数)的情况。以下代码由于重载解析歧义而编译出错:
open class Animal (val stttt:String, val str:String = "hjm") {
constructor(number1: Int, _number2: Int) :this("dsa")
{
println("runnnnnn")
}
}
获取构造函数作为参数的函数:
fun function(factory: () -> Animal) {
val x: Animal = factory()
}
问题是:
function(::Animal)
我该如何解决这个冲突?以及 function 如何知道它得到的构造函数类型(取决于构造函数,每个构造函数需要不同的参数)
我认为这只是一条不正确的错误信息。真正的问题是 none 的构造函数与函数所需的签名匹配。您的两个构造函数都没有零参数。在这种情况下,您可以让您的函数请求一个具有与您的构造函数之一匹配的签名的函数:
fun function(factory: (String) -> Animal) {
val x: Animal = factory("foo")
}
使用默认参数可能会造成构造函数歧义。即使没有构造函数引用,这也是一个问题,因此您应该首先避免这样做。编译器可能应该对此发出警告。
我正在阅读以下文档:Constructor References
解释了如何将引用发送到构造函数。但是他们没有描述存在多个构造函数(重载构造函数)的情况。以下代码由于重载解析歧义而编译出错:
open class Animal (val stttt:String, val str:String = "hjm") {
constructor(number1: Int, _number2: Int) :this("dsa")
{
println("runnnnnn")
}
}
获取构造函数作为参数的函数:
fun function(factory: () -> Animal) {
val x: Animal = factory()
}
问题是:
function(::Animal)
我该如何解决这个冲突?以及 function 如何知道它得到的构造函数类型(取决于构造函数,每个构造函数需要不同的参数)
我认为这只是一条不正确的错误信息。真正的问题是 none 的构造函数与函数所需的签名匹配。您的两个构造函数都没有零参数。在这种情况下,您可以让您的函数请求一个具有与您的构造函数之一匹配的签名的函数:
fun function(factory: (String) -> Animal) {
val x: Animal = factory("foo")
}
使用默认参数可能会造成构造函数歧义。即使没有构造函数引用,这也是一个问题,因此您应该首先避免这样做。编译器可能应该对此发出警告。