我正在使用带有自定义类对象的JComboBox,并且equals方法被覆盖,并且非常深入地集成到代码中。
问题是如果JComboBox下拉列表中的两个对象相等,那么如果选择了一个,则选择all,并且get selected index返回-1。
有没有办法将Vector<ObjectA>
投射到Vector<ObjectB>
?
我试过了
Vector<Clas_2> v_temp=(ca.courses.get(i).classes);
和
Vector<Clas_3> v_temp=(ca.courses.get(i).classes);
其中Clas_2
是Clas_1
的父级,而Clas_3
是Clas_1
的扩展,但它们都没有编译。
我只需要JComboBox不要使用过度的等于方法。
*注意我知道我可以将每个单独的元素转换为一个新的数组,但宁愿拥有更高效的内存解决方案。
答案 0 :(得分:1)
不,不是没有类型不安全。但是你可以将Vector<Clas_1>
转换为Vector<? extends Clas_2>
,但这可以解决你的问题。
由于Clas_2
是Clas_1
的父类,因此get
中Vector<Clas_1>
的任何内容是Clas_2
的实例但是,您add
Clas_2
Vector<Clas_1>
Clas_2
Clas_1
extends
并非{{1}}的所有实例都是{{1}}的实例。 {{1}}语法进行了区分。
答案 1 :(得分:1)
更改您在代码中声明变量的类型不会更改调用equals()
方法的内容。它总是被覆盖的,无论你把它投射到什么。这就是多态性的工作原理。如果你想要一个不同的equals实现,你需要创建一个不同的类。
答案 2 :(得分:0)
我同意迈克的观点。请查看作者建议使用带有一些自定义代码的外部比较器的this article。