Как сделать уникальный идентификатор для объекта, который не является случайным - PullRequest
0 голосов
/ 28 января 2019

Проблема

Мне нужно создать уникальный id для каждого Person объекта.

public interface Person 
{
    String getName();
}

public class Chef implements Person
{
    String name;
    ....
    // all other instance variables are not unique to this object.
}
public class Waiter implements Person
{
    String name;
    ....
    // all other instance variables are not unique to this object.
}

Дополнительная информация

Все остальные переменные экземпляра внутри Chef не являются уникальными для конкретного Chef.Мы также не можем добавить дополнительные переменные в класс Chef, чтобы сделать его уникальным.Это потому, что эта информация поступает с внутреннего сервера, и я не могу изменить класс Chef. Это распределенная система.

Что я пытаюсь сделать

Я хочу создать целое число, которое позволит мне отобразить этот Person объект.Я пытался создать «уникальный» id.

private int makeId(Person person)
{
    int id = person.getName()
        .concat(person.getClass().getSimpleName())
        .hashCode();

    return id;
}

Однако я знаю, что это не совсем уникально, потому что hashCode для имени не гарантирует ничего уникального.

Без использования random я могу сделать это id уникальным?

Я прошу прощения за недопонимание , но я не могу добавить больше полей в мой Chef или Waiter класс объектов, и приложение распространяется .

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Если ваше приложение не распространяется, просто используйте статический счетчик во время построения:

public class Chef {

    private static int nextId = 1;

    private final String name;
    private final int id;

    public Chef(String name){
        this.name = name;
        this.id = Chef.nextId++;
    }
}

Идентификатор первого Chef будет 1, второго - 2 и т. Д.

Если ваша программа многопоточная, используйте AtomicInteger для nextId вместо простого int.

Просто не используйте hashCode в качестве уникального идентификатора.Хеш-коды по определению не обязательно должны быть уникальными.

0 голосов
/ 28 января 2019

А как насчет добавления глобального уникального идентификатора (GUID)?

GUID - это 128-разрядное целое число (16 байт), которое можно использовать на всех компьютерах и в сетях, где требуется уникальный идентификатор.Такой идентификатор имеет очень низкую вероятность дублирования.

В Java он называется UUID .Например:

UUID uuid = java.util.UUID.randomUUID();

System.out.println(uuid.toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...