Referencja do String

0

Hej!! Witam wszystkich.

Mam taki problem... Mam klasę która m.in. pakuję obiekty innej klasy w listę, dla uproszczenia np. owoców (w skrócie)

class ListaOwoców{
public List<Owoc> elements = new ArrayList<Owoc>();
}

klasa "Owoc" posiada pole "kolor":
class Owoc{
String kolor;
}

Teraz chciał bym nadpisać metodą toString() klasy ListaOwoców, żeby osiągnąć poniższy efekt:

jabłko: czerwony,
pomarańcza: pomarańczowy;
banan: żółty,
itp...

przy czym nazwy owoców (jabłko, pomarańcza, banan) to nazwy instancji obiektów które utworzyłem przed dodaniem ich do listy(ich referencji).

korzystając z metod: getClass().getName() (a dokładniej msg += elements.get(i).getClass().getSimpleName();) otrzymuję efekt w stylu:

Owoc: czerwony,
Owoc: pomarańczowy;
Owoc: żółty,...

Proszę, napiszcie mi jak to zrobić:) tylko nie chce dodawać dodatkowego pola w klasie Owoc z nazwą tego owocu! chciał bym brać nazwę instancji obiekty.

0

Nazwę czego? Chodzi ci o nazwę zmiennej? Nie możesz tego zrobić, bo taka nazwa w czasie wykonania może już nie istnieć, poza tym skąd byłoby wiadomo, o którą zmienną posiadającą referencję do tego obiektu tobie chodzi? Innego wyboru niż pole z nazwą nie masz (chyba że dziedziczenie + metoda nazwaOwocu(), ew. getClass().getSimpleName()).

abstract class Owoc {
    private String kolor;

    public Owoc(String kolor) {
        this.kolor = kolor;
    }

    public String kolor() {
        return kolor;
    }

    public abstract String nazwa();

    @Override public String toString() {
        return kolor() + " " + nazwa();
    }
}

class Banan extends Owoc {
    public Banan(String kolor) {
        super(kolor);
    }

    public String nazwa() {
        return "banan";
    }
}

class Jabłko extends Owoc {
    public Jabłko(String kolor) {
        super(kolor);
    }

    public String nazwa() {
        return "jabłko";
    }
}

// ...

ListaOwocow lista = new ListaOwocow();
lista.dodajOwoc(new Jabłko("czerwone"));
lista.dodajOwoc(new Banan("żółty"));
System.out.println(lista);
// czerwone jabłko
// żółty banan
0

Nie da się tak zrobic bo nazwy zmiennych są tracone.
Może chciałeś to robić z użyciem HashMap<> ?

0

Wielkie dzięki za tak szybkie odpowiedzi:) Nie wiedziałem, że nazwy są tracone. W takim razie zostaje tylko dodać dodatkowe pole z nazwą. Chciałem tego uniknąć, ale w takim wypadku nie mam innego wyboru. Jeszcze raz wielkie dzięki za odpowiedzi!!:)

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