Tar*_*ski 9 java generics icomparable treeset
例如,当第二个Object添加到TreeSet时,下面的代码抛出ClassCastException.无法编写TreeSet,因此type参数只能是Comparable类型?即 TreeSet不会编译,因为Object不是Comparable.通过这种方式,仿制药实际上可以完成它们的工作 - 类型安全.
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String [] args) {
TreeSet<Object> t = new TreeSet<Object>();
t.add(new Object());
t.add(new Object());
}
}
Run Code Online (Sandbox Code Playgroud)
axt*_*avt 13
TreeSet不需要其类型参数Comparable,因为它可以采用外部Comparator来比较非Comparable值.
如果类型必须是Comparable,则无法创建具有不可比类型和Comparator的TreeSet(您可以像现在一样).
解决这个问题仍然是类型安全的一种方法是使用两个类:一个具有可比较的类型参数,一个具有不可比较的类型参数,并且没有默认构造函数(只有带有比较器的构造函数),但是我假设java开发人员不想引入两个基本上做同样事情的类(尽管一个可以很容易地实现为另一个的包装器).
另一种(可以说是更清晰的方式)是扩展类型系统,以便某些构造函数仅在与某些类型参数一起使用时才存在(即默认构造函数仅在类型参数具有可比性时才存在),但我想这会使得泛型系统对于java来说太复杂了.
| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |