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)?
0
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());
}
}