enum nie aktualizowany poza metodą

0

Cześć. Mam sobie enum który przekazuję mojej klasie jako argument w konstruktorze, gdzie inicializuję moją składową. Ale jeśli zmienie tą składową w mojej klasie, to oryginalny enum(ten który przekazałem jako argument) nie zmienia się. Przypuszczam że do dlatego że enum jest typem prymitywnym, a tego typu rzeczy działają tylko na klasach. Więc jak to rozwiązać (oprócz pisania metody getUpdatedEnum i cały czas ją wywoływać przy oryginalnym enumie)?

1

W Javie nie da się tego zrobić bezpośrednio. Najprostszym rozwiązaniem byłoby stworzenie wrappera i przekazywanie właśnie jego:

class IndirectReference<E> {
    private E ref;
    
    public IndirectReference(E ref) {
        this.ref = ref;
    }
    
    public E get() {
        return ref;
    }
    
    public void set(E ref) {
        this.ref = ref;
    }
}

enum Enum { E1, E2 }

class Main {
    private IndirectReference<Enum> e;
    
    public Enum get() {
        return e.get();
    }
    
    public void foo(IndirectReference<Enum> ref) {
        this.e = ref;
    }
    
    public static void main(String[] args) {
        Main prog = new Main();
        IndirectReference<Enum> ref = new IndirectReference(Enum.E1);
        prog.foo(ref);
        System.out.println("Before: " + prog.get());
        ref.set(Enum.E2);
        System.out.println("After: " + prog.get());
    }
}

http://ideone.com/OZfZB7

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.