Java - porównanie obiektów

0

Mam problem dotyczący porównania obiektów.
Najpierw w jednej funkcji pobieram do tablicy obiektów różne obiekty (różnych typów w tym typów definiowanych przeze mnie). Następnie w drugiej funkcji pobieram z powrotem te obiekty, kastując do odpowiednich typów. Nie wiem czy problem polega z Comboboxem czy z tym jak Object i potem w dół jest rzutowane.

Sytuacja obrazowo:

public Object[] getFields()
{
Object bla[] = new Object[10];
bla[0] = klient.getClient(); // zwraca obiekt typu Klient
bla[1] = p.getPracownik(); // zwraca obiekt typu Pracownik
return bla;
}

A potem sobie odczytuje:

    private void fillComboBoxes(){
            for(Pracownik p : ((Employees.getEmployees()))){
                pracownikCB.addItem(p);
//obiekty typu pracownik
//nastepnie
private void fillFields(Object[] fields, int id){ 
/*..*/
pracownikCB.setSelectedItem(fields[1]);

System.out.println((Pracownik)fields[1]);
        System.out.println(pracownikCB.getItemAt(2));
        System.out.println(fields[1].toString().equals(pracownikCB.getItemAt(2)));
        System.out.println(fields[1].getClass());
        System.out.println(pracownikCB.getItemAt(2).getClass());
        System.out.println(fields[1].hashCode());
        System.out.println(pracownikCB.getItemAt(2).hashCode());

Generalnie nie ustawia tego obiektu, który miałby zostać wybrany (mam na myśli ComboBoxa pracownikCB), niezależnie czy zrzutuje go na Pracownik (fields[1]) czy nie, stringi obiektów są równe, klasy obiektów również (po zrzutowaniu Object->Pracownik), ale hashCody się różnią.
Dziwi mnie ta sytuacja, gdyż następuje tutaj najpierw rzutuję tutaj w górę do Object, a potem w dół do tego samego typu Pracownik. HashCody się różnią tak jakby różniły się między sobą obiekty, a przecież żadna informacja nie powinna zostać zgubiona.

0

Ale WTF? Co ty tutaj w ogóle próbujesz zrobić? Nie bardzo rozumiem co ma wspólnego tablica fields[] z kolekcją którą zwraca getEmployees() a ty ewidentnie te dwie rzeczy tu mieszasz.

0

Nie wiem, czy mam rację, ale kolega próbuje chyba przez metodę toString lub hashCode porównać dwa obiekty.

0

To od początku.
Do JComboBoxa pracownikCb dodaje elementy z kolekcji typu ArrayList<Pracownik>. W ComboBoxie siędzą obiekty typu Pracownik.
Następnie chcę ustawić, aby wybrany został element (pracownik) z tego ComboBoxa, którego wcześniej pobieram w funkcji getFields(), jest to odpowiednio drugi element tablicy bla. Niestety nawet kastując go do Pracownik, nie zostaje on wybrany i standardowo w ComboBoxie mamy wybrany pierwszy element. Mam tutaj na myśli ten fragment

pracownikCB.setSelectedItem(fields[1]);

Niezależnie, czy zostanie zrzutowany czy nie nie następuje jego wybór:

pracownikCB.setSelectedItem((Pracownik)fields[1]);

Kolejne sysouty są tylko poglądowo, generalnie fields[1] zawiera dokładnie to samo co drugi element w ComoBoxie (co do wartości), zaś metoda equals zwraca false. Sprawdzałem dalej hashCode() i okazało się że są różne, a powinne być identyczne ze względu na to, że są generowane z tego samego obiektu Pracownik. Czy zrzutowanie Pracownik > Object > Pracownik, może zmienić hashCode przez co lokalny obiekt pracownik != obiektu pracownik z listy?

0

Odpal to pod debugerem i zobacz gdzie się coś "psuje". Ja zgaduje że te obiekty wcale nie są tożsame i dlatego tak się dzieje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1