我有一个像这样声明的构造函数的类
class Facade<T : SuperClass>(
val kClass: KClass<in T> = SuperClass::class
)
这样做是为了让开发人员在想要使用 SuperClass 而不是子类时不必指定 SuperClass。甚至发送类类型的原因是,这样开发人员就不必在尖括号中指定类型。
但现在问题来了。像下面这样创建实例,表示没有足够的信息来推断参数 T。这导致必须将类放入尖括号中。
Facade()
但是由于默认值是 SuperClass,那么 kotlin 应该能够将参数 T 推断为 SuperClass。我在想什么错?
谢谢
TL;博士:
Facade(SubClass:class) // working
Facade(SuperClass:class) // working, but don't want (superclass is default)
Facade<SuperClass>() // working, but don't want angle brackets <>
Facade() // not working, cannot infer T type from default, why?