我创建了两个 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/