Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何投射向量<;对象a>;到向量<;ObjectB>;在爪哇?_Java_Vector_Casting_Jcombobox - Fatal编程技术网

Java 如何投射向量<;对象a>;到向量<;ObjectB>;在爪哇?

Java 如何投射向量<;对象a>;到向量<;ObjectB>;在爪哇?,java,vector,casting,jcombobox,Java,Vector,Casting,Jcombobox,我将JComboBox与一个自定义类对象一起使用,equals方法被过度使用,并深入集成到代码中 问题在于,如果JComboBox下拉列表中的两个对象相等,那么如果选择了一个对象,则会选择所有对象,并且get selected索引返回-1 有没有办法将向量转换为向量? 我试过了 Vector v_temp=(ca.courses.get(i.class)); 及 Vector v_temp=(ca.courses.get(i.class)); 其中,Clas_2是Clas_1的父级,Clas

我将JComboBox与一个自定义类对象一起使用,equals方法被过度使用,并深入集成到代码中

问题在于,如果JComboBox下拉列表中的两个对象相等,那么如果选择了一个对象,则会选择所有对象,并且get selected索引返回-1

有没有办法将
向量
转换为
向量
? 我试过了

Vector v_temp=(ca.courses.get(i.class));

Vector v_temp=(ca.courses.get(i.class));
其中,
Clas_2
Clas_1
的父级,
Clas_3
Clas_1
的扩展,但它们都不能编译

我只需要JComboBox不要使用过度使用的equals方法


*注意:我知道我可以将每个元素强制转换为一个新的数组,但我更希望有一个更高效的内存解决方案。

不,不是因为类型不安全。但是,您可以将
Vector
强制转换为
Vector更改您在代码中声明的变量类型不会更改调用的
equals()
方法。它将始终是被覆盖的,无论您将它转换为什么。这就是多态性的工作原理。如果你想要一个不同的equals实现,你需要创建一个不同的类。

Hmm,我尝试了这个方法,它可以编译,但是它似乎仍然在Clas_1中使用equals方法,而不是Clas_2(它总是返回false)。事实上,它并不能解决他的真正问题。无论施法多少,他都无法超越
equals
行为。在Java中不能这样做。如果您将其更改为Clas_2或Clas_3类型,并且其eqauls方法总是返回false,那么它不会使用当前类型的equals方法吗?不会。它将始终使用基础类型的equals方法。强制转换变量实际上并不会改变它的底层类型,只是改变它在代码中的外观。类型是断言类型“至少”必须是什么的一种方式。实际情况可能完全不同。我建议大家阅读一下多态性,以及它如何融入Java和OO编程。我想我用C++/C编写代码的时间太长了,你可以很容易地切换类型。有没有办法让JComboBox不使用equals方法?这是不可能的,没有。您需要做的是更改实际的底层类型。编写一个新类,您可以将引用交给
Clas_1
Clas_2
等,但提供所需的equals实现可能是一种有效的方法。我猜如果你不能在你的类中实现一个精确的equals方法,那么它们可能不是放在JComboBox中的正确类型。也许在每个类中都发布equals实现?我认为最好的办法是让for循环遍历我的向量,并使用toString()添加每个Clas_1。谢谢你的帮助。
Vector<Clas_2> v_temp=(ca.courses.get(i).classes);
Vector<Clas_3> v_temp=(ca.courses.get(i).classes);