首页 > 解决方案 > Java Generic Type 参数可以扩展另一个 Type 参数和附加的有界类型吗?

问题描述

我正在创建一个具有 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。

标签: javagenericsinheritancegeneric-programming

解决方案


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

另外,当使用多个边界时,第一个可以是类或接口,剩下的只能是接口。这源于 Java 不支持多重继承这一事实,因此列出多个类与仅列出最远的子类相同。

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

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

或者,因为Mammal无论如何都实现了Animal接口:

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

推荐阅读