Stałe pola

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 178
0

Witam,
chciałbym stworzyć w klasie pole "ID" które będzie stale ale dla każdego obiektu inne. Jak to zrobić skoro gdy tworze pole w klasie z przydomkiem "final" to kompilator wymaga od razu inicjalizacji ?

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
1

Może coś takiego:

Kopiuj
static int counter = 0;
private int id;
//w konstruktorze
counter++;
id = counter;
niezdecydowany
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Bieszczady
0

Nadal możesz użyć modyfikatora final:

Kopiuj
class A {    
    private final int x;

    public A() {
        x = 5;
    }
}
KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
0

to jakieś DTO albo encja? czemu nie zrobisz po prostu o.0 ?

Kopiuj
private Integer id;
  • Rejestracja: dni
  • Ostatnio: dni
1
bogdans napisał(a):

Może coś takiego:

Kopiuj
static int counter = 0;
private int id;
//w konstruktorze
counter++;
id = counter;

Pytanie czy rozwiazanie ma byc thread-safe, to powyzsze nie jest? Poza tym pole moze byc final - final nie znaczy ze trzeba od razu przypisac, final znaczy ze mozna tylko raz przypisac i musi sie to stac do konca inicjalizacji obiektu.

Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6822
0

Jest taka klasa jak UUID, która powinna rozwiązać ten problem bez kombinowania z wewnętrznymi licznikami. Tyle tylko, że tak stworzony identyfikator nie będzie miał własności związanych z opisaniem kolejności tworzenia obiektów (jest losowy).

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.