Подтвердить что ты не робот

Элегантный способ назначения идентификатора объекта в Java

У меня есть класс для объектов... lat say apples.

Каждый объект-объект apple имеет уникальный идентификатор (id)... как я могу (элегантно и эффективно) создать новый уникальный идентификатор.

Спасибо

4b9b3361

Ответ 1

имеют static int nextId в вашем классе Apple и увеличивайте его в своем конструкторе.

Вероятно, было бы разумно обеспечить, чтобы ваш инкрементный код был атомарным, поэтому вы можете сделать что-то подобное (используя AtomicInteger). Это гарантирует, что если два объекта будут созданы точно в одно и то же время, они не будут использовать один и тот же идентификатор.

public class Apple {
    static AtomicInteger nextId = new AtomicInteger();
    private int id;

    public Apple() {
        id = nextId.incrementAndGet();
   }
}

Ответ 2

Используйте java.util.UUID.randomUUID()

Это не int, но гарантировано быть уникальным:

Класс, представляющий неизменяемый универсально уникальный идентификатор (UUID).


Если ваши объекты каким-то образом управляются (например, с помощью некоторого механизма сохранения), часто бывает, что менеджер генерирует идентификаторы - например, используя следующий идентификатор из базы данных.

Связанный: статья Джеффа Этвуда о 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();
}

Безопасный поток без синхронизации!