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