【发布时间】:2018-01-21 01:39:27
【问题描述】:
我是半 Java 识字者,并在 Groovy 中尝试过一些东西。
在 Groovy/Java 中是否可能:
public class A {
}
public class B {
}
public class C<Ta extends A, Tb extends B> extends Ta {
public Ta[] bArray;
public Tb[] getAllBs()
{
Tb[] ret = new Tb[0];
....
return ret;
}
}
以上定义没有显示任何错误。但是当我尝试使用 C 作为另一种类型的基类时,出现错误:
public class DummyA extends A {};
public class DummyB extends B {};
public class D extends C<DummyA, DummyB> {
}
上面的定义显示错误'D 类型的层次结构不一致'。
如果我将 C 重新定义为以下任何一种,错误就会消失:
//remove the base class, Ta, from C
public class C<Ta extends A, Tb extends B> {
....
}
(或)
//Use the class A, instead of generic type Ta, as base class
public class C<Ta extends A, Tb extends B> extends A {
....
}
我一定是违反了一些 Java 规则,但无法识别
【问题讨论】:
-
对我来说,它在
Tb[] ret = new Tb[0];上失败并带有消息Cannot create a generic array of Tb
标签: java generics inheritance