java - 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。
解决方案
如果边界之一是类型参数,则不能使用多个边界。
另外,当使用多个边界时,第一个可以是类或接口,剩下的只能是接口。这源于 Java 不支持多重继承这一事实,因此列出多个类与仅列出最远的子类相同。
要使其工作,您需要编写如下代码:
public class TestGeneric<TAnimal extends Animal, TMammal extend Mammal & Animal> { }
或者,因为Mammal无论如何都实现了Animal接口:
public class TestGeneric<TAnimal extends Animal, TMammal extends Mammal> { }
推荐阅读
- python - 在同一请求中使用 Django 测试客户端发布多个文件
- nativescript - 制作浮动布局后,iOS 按钮无法点击
- arrays - 附加一个数组并存储在 UserDefaults (Swift)
- css - 为什么 Chrome 总是添加 1px 的边框半径,即使特定的角设置为 0px?
- python - PyTorch:索引二维张量和行索引的二维张量
- watson-knowledge-catalog - 您是否有关于从不同数据目录转换到 IBM 数据目录的过程的信息?
- javascript - 如何将动态模态表单字段发送到 django
- javascript - 如何将这些“if”语句转换为算法
- bash - 如何在没有用户干预的情况下首次运行 crontab
- javascript - 找不到模块'regenerator-runtime/runtime'