【发布时间】:2013-12-23 23:03:11
【问题描述】:
我创建了两个 Java 接口,Tree<T> 和 BinarySearchTree<T extends Comparable<T>>,其中第二个接口扩展了第一个接口。我有一个BinarySearchTree 的实现,称为LinkedBinarySearchTree。以下代码在编译时显然会报错:
Tree<Object> a = new LinkedBinarySearchTree<Object>();
因为LinkedBinarySearchTree 实现的接口已将T 指定为Comparable 类型,而Objects 不是Comparable。我完全理解这一点,它不会对我的实现构成问题。
我希望了解的是,这种方法在实践中是否存在危险。我无法想象从Tree 到BinarySearchTree 的数据类型“缩小”会给我一个运行时错误(ClassCastException,也许?)但我希望与更多有知识的人确认这一点。本质上,在扩展接口时“缩小”接口持有的类型是否被认为是不好的做法,如果是,为什么?
【问题讨论】:
-
不,这不是一个坏习惯。您可以通过不缩小类型并要求 Comparator 作为参数来使您的 BST 更通用,就像 TreeSet 一样。
标签: java inheritance interface