Java泛型类型参数可以扩展另一个类型参数和其他有界类型吗?

时间:2018-11-03 10:43:28

标签: java generics inheritance generic-programming

我正在创建一个具有2个类型参数(TAnimal和TMammal)的泛型类(TestGeneric),其中第二个类型参数(TMammal)扩展了第一个类型参数(TAnimal)和另一个类型(哺乳动物)。

public class TestGeneric<TAnimal extends Animal, TMammal extends TAnimal & Mammal> { .. }

其中

public interface Animal { ... }

public class Mammal implements Animal { ... }

我遇到了这个Java问题:

  

当第一个绑定是类型时,无法指定任何其他绑定的哺乳动物   参数。

如果我在周围交换边界类型TAnimal和Mammal,

public class TestGeneric<TAnimal extends Animal, TMammal extends Mammal & TAnimal> { .. }

我遇到了另一个Java问题:

  

类型TAnimal不是接口;它不能被指定为   有界参数。

总有办法克服Java中的上述限制吗?

我正在使用Java 1.8-172。

1 个答案:

答案 0 :(得分:1)

如果边界之一是类型参数,则不能使用多个边界。

此外,当使用多个边界时,第一个边界可以是类或接口,而其余边界只能是接口。这是因为Java不支持多重继承,因此列出多个类与仅列出最远的子类相同。

要使其工作,您需要编写如下代码:

public class TestGeneric<TAnimal extends Animal, TMammal extend Mammal & Animal> { }

或者,因为哺乳动物无论如何都实现了 Animal 接口:

public class TestGeneric<TAnimal extends Animal, TMammal extends Mammal> { }