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 ?
0
1
Może coś takiego:
static int counter = 0;
private int id;
//w konstruktorze
counter++;
id = counter;
0
Nadal możesz użyć modyfikatora final:
class A {
private final int x;
public A() {
x = 5;
}
}
0
to jakieś DTO albo encja? czemu nie zrobisz po prostu o.0 ?
private Integer id;
1
bogdans napisał(a):
Może coś takiego:
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.
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).