Javabase作为模板参数

Javabase作为模板参数,java,generics,inheritance,Java,Generics,Inheritance,我半懂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]; .... retur

我半懂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;
   }
}
公共A类{
}
公共B级{
}
公共C类扩展Ta{
公共炮台;;
公共Tb[]getAllBs()
{
Tb[]ret=新Tb[0];
....
返回ret;
}
}
以上定义没有显示任何错误。但当我尝试使用C作为另一种类型的基类时,我得到了一个错误:

public class DummyA extends A {};
public class DummyB extends B {};

public class D extends C<DummyA, DummyB> {
}
公共类DummyA扩展了{};
公共类DummyB扩展了B{};
公共类D扩展C{
}
上述定义显示错误“类型D的层次结构不一致”

如果我将C重新定义为以下任意一项,错误就会消失:

//remove the base class, Ta, from C
public class C<Ta extends A, Tb extends B> {
....
}
//从C中删除基类Ta
公共C类{
....
}
(或)

//使用类A而不是泛型类型Ta作为基类
公共类C扩展了{
....
}

我一定是违反了一些Java规则,但无法确定这是不可能的,因为D超类的超类是“泛型的”。
不允许使用泛型和超类型!这是允许的:

public class C<B extends WhatElse> extends ArrayList<B>{
公共类C扩展了ArrayList{
因为超类显然在包java.lang中,并且您只为超类提供“自己的”泛型参数。
java需要一个清晰的结构来编译类!
例如:您应该能够覆盖哪些方法?

这是不可能的,因为D超类的超类是“泛型的”。
和泛型超类型是不允许的!这是允许的:

public class C<B extends WhatElse> extends ArrayList<B>{
公共类C扩展了ArrayList{
因为超类显然在包java.lang中,并且您只为超类提供“自己的”泛型参数。
java需要一个清晰的结构来编译类!
例如:您应该能够覆盖哪些方法?

以及这一行的一些信息:
Tb[]ret=new Tb[0];
永远不会起作用!

您无法生成不能使用的泛型数组。new Tb();也!

这一行的一些信息:
Tb[]ret=new Tb[0];
永远不会工作!

你不能生成通用数组你不能使用
new Tb();
太多!

对我来说,它在
Tb[]ret=new Tb[0]上失败;
带有消息
不能创建Tb的通用数组对我来说,它在
Tb[]ret=new Tb[0]上失败;
带有消息
不能创建Tb的通用数组