【发布时间】:2020-04-22 22:48:43
【问题描述】:
我正在 Kotlin 中构建一个 Kubernetes 运算符,并尝试调用一个定义了多个边界的通用方法。方法签名如下:
<C extends Namespaceable<C> & KubernetesClient> LeaderElectorBuilder<C> leaderElector();
Java 中的多边界语法允许在泛型类或方法定义中使用的类型定义多个约束。见https://www.tutorialspoint.com/java_generics/java_generics_multiple_bounds.htm
我尝试在 Kotlin 中调用该方法,但它无法推断类型,并且编译器不接受我的任何定义。
如果我这样做:
client.leaderElector()
Kotlin 会抱怨“Not enough information to infer type variable C”。
拒绝任何显式类型,通常:
client.leaderElector<KubernetesClient>()
Kotlin 会抱怨“类型参数不在其范围内。预期:可命名空间
如果我使用 Namespaceable<KubernetesClient> 作为显式类型,则相反(“预期:KubernetesClient!找到:Namespaceable
如何在 Kotlin 中正确调用该方法?
提前致谢!
【问题讨论】:
-
... 我的意思是,这些类型 do 都不满足界限。选择一个真正满足他们的类型(或创建一个类)并且它可能会工作?从我看到的代码来看,
Namespaceable<KubernetesClient>不一定是KubernetesClient,KubernetesClient不一定是Namespaceable<KubernetesClient>。 -
也许您需要一个联合
KubernetesClient和Namespaceable<T>的类型,例如class MyClass : KubernetesClient, Namespaceable<MyClass>?
标签: java generics kotlin kubernetes