Как привести вектор <ObjectA>к вектору <ObjectB>в Java? - PullRequest
1 голос
/ 15 марта 2011

Я использую JComboBox с пользовательским объектом класса, а метод equals перегружен и очень глубоко интегрирован в код.

Проблема в том, что если в раскрывающемся списке JComboBox два объекта равны, то если выбран один, выбираются все, и индекс get selected возвращает -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 не использовал переопределенный метод equals.

* Обратите внимание, я знаю, что могу преобразовать каждый отдельный элемент в новый массив, но предпочел бы более эффективное решение для памяти.

Ответы [ 3 ]

1 голос
/ 15 марта 2011

Изменение типа объявленной вами переменной, как в коде, не изменит то, что вызывается методом equals().Он всегда будет переопределенным, независимо от того, к чему вы его применили.Вот как работает полиморфизм.Вам нужно будет создать другой класс, если вы хотите другую реализацию equals.

1 голос
/ 15 марта 2011

Нет, небезопасно.Но вы можете привести 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 делает это различие.

0 голосов
/ 15 марта 2011

Я согласен с Майком.Взгляните на эту статью , где автор предлагает использовать внешний компаратор с некоторым пользовательским кодом.

...