java - 实现接口(interface)时扩展包含的类型

标签 java inheritance interface

我创建了两个 Java 接口(interface) Tree<T>BinarySearchTree<T extends Comparable<T>> ,其中第二个接口(interface)扩展了第一个接口(interface)。我有一个 BinarySearchTree 的实现,称为 LinkedBinarySearchTree 。下面的代码在编译时显然会报错:

Tree<Object> a = new LinkedBinarySearchTree<Object>();

LinkedBinarySearchTree实现指定 T 的接口(interface)作为Comparable类型,和 Object不是Comparable 。我完全理解这一点,并且它不会对我的实现构成问题。

我想要了解的是这种方法在实践中是否可能危险。我无法想象从Tree“缩小”数据类型的场景至BinarySearchTree会给我一个运行时错误( ClassCastException ,也许?),但我希望与更有知识的人确认这一点。本质上,在扩展接口(interface)时“缩小”接口(interface)所持有的类型是否被认为是不好的做法?如果是,为什么?

最佳答案

事实恰恰相反 - 这实际上是很好的做法。

请记住,使用泛型是一种通过在编译时捕获尽可能多的错误来避免编码错误的技术。通过加强 BinarSearchTree 接口(interface)的特异性,您实际上使人们更难意外地误用它。不仅如此,他们的错误还会在编译时被发现。

关于java - 实现接口(interface)时扩展包含的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752515/

相关文章:

java - 如何将 JScrollpane 添加到 JPanel?

Python 继承 : Return subclass

C++:为什么要使用同一个类进行扩展和参数化?

java - 条件接口(interface)实现

java - 在另一个通用接口(interface)中使用一个通用接口(interface)

java - 如何在DesignGridLayout库中动态创建JButton值?

java - 在 Scala 中处理 Java 方法 'paused()'?

java - 了解 DAO 模式和接口(interface)

java - Eclipse - 数组无法解析

使用 "this = "的 Javascript 函数给出 "Invalid left-hand side in assignment"