Элегантный способ назначения идентификатора объекта в Java
У меня есть класс для объектов... lat say apples.
Каждый объект-объект apple имеет уникальный идентификатор (id)... как я могу (элегантно и эффективно) создать новый уникальный идентификатор.
Спасибо
Ответ 1
имеют static int nextId в вашем классе Apple и увеличивайте его в своем конструкторе.
Вероятно, было бы разумно обеспечить, чтобы ваш инкрементный код был атомарным, поэтому вы можете сделать что-то подобное (используя AtomicInteger). Это гарантирует, что если два объекта будут созданы точно в одно и то же время, они не будут использовать один и тот же идентификатор.
public class Apple {
static AtomicInteger nextId = new AtomicInteger();
private int id;
public Apple() {
id = nextId.incrementAndGet();
}
}
Если ваши объекты каким-то образом управляются (например, с помощью некоторого механизма сохранения), часто бывает, что менеджер генерирует идентификаторы - например, используя следующий идентификатор из базы данных.
Связанный: статья Джеффа Этвуда о GUID (UUID). Однако это связано с базой данных, но из вашего вопроса неясно, хотите ли вы сохранить ваши объекты или нет.
Ответ 3
Думали ли вы об использовании класса UUID. Вы можете вызвать функцию randomUUID() для создания нового идентификатора каждый раз.
Ответ 4
Существует еще один способ получить уникальный идентификатор. Вместо использования int или другого типа данных просто создайте класс:
final class ID
{
@Override
public boolean equals(Object o)
{
return this==o;
}
}
public Apple
{
final private ID id=new ID();
}