使用反射时如何返回特定的构造函数?

问题描述

我正在阅读以下文档: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")
}

可以通过使用默认参数来创建构造函数的歧义。即使没有构造函数引用,这也是一个问题,因此您首先应该避免这样做。编译器可能应该对此发出警告。