java - 何时使用或如何在泛型中使用多重绑定

原文 标签 java generics multiple-bounds

我是泛型新手,可以从听到的声音中学习泛型
https://docs.oracle.com/javase/tutorial/java/generics/bounded.html

我正在学习多重界限
我了解的是您可以指定如下的类

class D <T extends A & B & C> { /* ... */ }
D<A> d = new D<>();

仅当A同时实现B和C时
否则将发生其他明智的编译时错误
B和C也应该是Interface否则,否则//接口会发生编译时错误

我不是在说通配符

我的问题是我没有对此进行任何真正的编程用途。
我正在寻找一种方法/示例如何在编码时使用多重绑定泛型。

我什么时候应该使用它?

谢谢

最佳答案

考虑以下片段:

class SpineWarmCollection <T extends Vertebrate & Warmblooded> { /* ... */ }

class Mammal extends Vertebrate implements Warmblooded {}

class Bird extends Vertebrate implements Warmblooded {}

class Reptile extends Vertebrate {}

SpineWarmCollection<Mammal> mammalCollection = new SpineWarmCollection<>();

SpineWarmCollection<Bird> birdCollection = new SpineWarmCollection<>();

SpineWarmCollection<Reptile> reptileCollection = new SpineWarmCollection<>(); // Generates a compile error, since Reptiles are not warmblooded.

脊椎动物是动物分类学的一类;但是,温血是一种特质。没有单一的祖先类别是温血的,因为哺乳动物和鸟类都是温血的,但是它们的共同祖先不是Vertebrate。

由于T只能是扩展Vertebrate和Warmblooded的类,因此泛型可以访问在Vertebrate和Warmblooded中声明的任何方法。

您甚至都不需要上课。 T只能扩展接口,这将允许泛型被实现接口的任何类集使用,即使这些类集之间完全不相关。

相关文章:

java - 实体属性可以被同一实体的其他属性映射吗?

java - 使用vtd-xml解析xml文件

java - 用于TLS / SSL的密码套件强化的Java正则表达式

java - 无法创建具有可嵌入ID的新实体

java - Java:通用类型转换,如何解决此问题,以免抑制未经检查的警告

java - java扩展泛型类型歧义方法调用

java - 如何参数化使用通配符参数扩展类型的类型?

java - Java编译器如何为具有多个界限的参数化类型选择运行时类型?