我正在创建一个具有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。
答案 0 :(得分:1)
如果边界之一是类型参数,则不能使用多个边界。
此外,当使用多个边界时,第一个边界可以是类或接口,而其余边界只能是接口。这是因为Java不支持多重继承,因此列出多个类与仅列出最远的子类相同。
要使其工作,您需要编写如下代码:
public class TestGeneric<TAnimal extends Animal, TMammal extend Mammal & Animal> { }
或者,因为哺乳动物无论如何都实现了 Animal 接口:
public class TestGeneric<TAnimal extends Animal, TMammal extends Mammal> { }