Kotlin泛型自定义使用通配符的类型

所以在Java中我可以做到以下几点,定义一个具有超类和接口约束的类型。

public class Main<ControllerType extends Node & Controller> { private ControllerType controller; private ControllerType controller2; private Main(ControllerType controller, ControllerType controller2) { this.controller = controller; this.controller2 = controller2; } public static void main(String[] args) { Main<?> main = new Main<>(new Home(), new Parent()); } } 

但是在Kotlin这是不可能的。

 class Main<ControllerType>(val controller: ControllerType, val controller2: ControllerType) where ControllerType : Node, ControllerType : Controller fun main(args: Array<String>) { val main = Main<*>(Home(), Parent()) } 

我在星形投影上得到以下错误:

函数和属性的类型参数不允许投影

那么怎么可能解决这个问题。 我看着类型别名,但他们没有我想要的功能。

不,没有办法像通配符那样用Java来完成。 这是不可能的,因为通配符不安全。

 private Main(ControllerType controller, ControllerType controller2) 

controllercontroller2假设是相同的或继承的类型,但是Java允许你使用通配符来输入。

星型投影不是通配符替换。 当您不知道确切类型并且允许您执行安全操作时,您使用星形投影。

如果controllercontroller2是两个不同的类型,那么你应该有两个通用的参数。

 class Main<T, U>(val controller: T, val controller2: U) where T : Node, T : Controller, U : Node, U : Controller fun main(args: Array<String>) { val main = Main(Home(), Parent()) }