java - 何时使用或如何在泛型中使用 Multiple Bound

标签 java generics multiple-bounds

我是泛型的新手,正在从 hear 学习泛型 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 其他方式//interface is expeced compile time error will occurs

我说的不是通配符

我的问题是我没有真正使用它进​​行编程。 我正在寻找一种方法/示例,说明如何在编码时使用多个绑定(bind)泛型。

我应该什么时候使用它?

谢谢

最佳答案

考虑以下片段:

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.

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

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

您甚至不需要上课。 T 只能扩展接口(interface),这将允许实现接口(interface)的任何类集使用泛型,即使这些类集彼此完全无关。

关于java - 何时使用或如何在泛型中使用 Multiple Bound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40070574/

相关文章:

ios - Swift 泛型类作为委托(delegate)

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

java - 从原始树中删除深度 k 以下的所有子树?

JavaFX- 在 TableView 中居中选定的行

java - 将字符串转换为可读的 SimpleDateFormat

java - Linux 上 Java 中的 IP 地址

java - 为什么在 put 方法中使用泛型声明 "<? super ArrayList> does not accept value "new Object()"的 HashMap?

java - 使用泛型可以解决我的问题吗?

java - 具有扩展多种类型的泛型参数的静态字段

java - 如何正确使用多重边界?