Obiekt stały i zwracanie referencji do niego

0

Witam
Pisze klasę, która z punktu widzenia użytkownika ma być stała (tak jak String). W tej klasie mam metodę, która zwraca kolekcję. Oczywiście muszę zrobić to poprzez referencję. Przykładowy kod

public class A {
Collection<Integer> tab;
   public A() {
      tab.add(12);
   }
   
   Collection<Integer> get() {
      return tab;
   }
}

Gdy zwracam referencję do tab umożliwiam również niekontrolowaną zmianę tej kolekcji przez użytkownika np:

A a = new A();
a.get().add(5);

Czy ktoś wie jak temu można zapobiec? Myślałem nad zwróceniem kopii kolekcji ale to wydało mi się zbyt wolne i pamięciożerne.
Pozdrawiam.

0

albo klon, ale musi to byc gleboka kopia albo mozesz zastosowac kolekcje do odczytu (czytalem gdzies o tym...).
mozesz takze zwrocic nowy obiekt implementujacy collection i delegujacy do niej wywolania tylko tych metod ktore chcesz i rzucajacy np UnsupportedOperationException w pp..

pozdrawiam

0

witam

Jest taka metoda
Collections.unmodifiableCollection(c);

Jakkolwiek działania w praktyce nie sprawdzałem.

pzdr

0

A const nie istnieje?

0

A istnieje?

0

Tak, slowo kluczowe const w jezyku Java istnieje. I to w zasadzie wszystko, co mozna o nim powiedziec.
olo16 bycmoze mial na mysli final, ale to slowo kluczowe odnosi sie do samej referencji, a nie do obiektu (tak, jak ma to miejsce z "const" w C++).
Zastosowanie niemodyfikowalnego widoku kolekcji (Collections.unmodifiableCollection(Collection)) jest w tym przypadku dobrym rozwiazaniem.
</b>

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