Целочисленное свойство как автоматически генерируемый номер - PullRequest
0 голосов
/ 17 сентября 2018

Я создаю простое Java-приложение, которое будет хранить и отображать информацию для клиентов.

Я хочу сделать id автоматическим сгенерированным числом, но у меня возникли проблемы с этим, не знаете, стоит ли устанавливать его в методах get или set? Может ли кто-нибудь помочь мне использовать это значение как?

Вот пример:

public class Customer{

public Person(String firstName, String lastName, String email, String address, String country){
    this.id.set(Integer.parseInt(UUID.randomUUID().toString()));
    this.firstName.set(firstName);
    this.lastName.set(lastName);
    this.email.set(email);
    this.address.set(address);
    this.country.set(country);
}

private final IntegerProperty id = new SimpleIntegerProperty(this,"Id",0);
private final StringProperty firstName = new SimpleStringProperty(this,"First Name","");
private final StringProperty lastName = new SimpleStringProperty(this,"Last Name","");
private final StringProperty email = new SimpleStringProperty(this,"E-mail","");
private final StringProperty address = new SimpleStringProperty(this,"Address","");  
private final StringProperty country = new SimpleStringProperty(this,"Country","");

Я также создал универсальные методы bean, но это просто так:

public StringProperty firstNamePropery(){
    return firstName;
}
public String getFirstName(){
    return firstName.get();
}
public void setFirstName(String firstName){
    this.firstName.set(firstName);
}

// ... остальные методы ... Я пытался использовать это, но не работает:

public IntegerProperty idProperty(){
    return id;
}
public Integer getId(){
    return id.get();
}
public void setId(){
    this.id.set(Integer.parseInt(UUID.randomUUID().toString()));
}

Спасибо, что помогли мне в этом.

1 Ответ

0 голосов
/ 17 сентября 2018

Строка UUID выглядит следующим образом 38400000-8cf0-11bd-b23e-10b96e4ef00d.Вы не можете разобрать эту строку в Integer.

Если вы хотите использовать UUID в качестве идентификаторов для клиентов, тогда объявите атрибут как UUID или String вместо Integer.

РЕДАКТИРОВАТЬ I

Кроме того, мне не нужно сохранять его как целочисленное значение, строка может выполнять работу, но просто не может получить ксоздайте это число при создании нового экземпляра этого класса.

Чтобы использовать UUID в качестве строки: В классе Customer атрибут id должен иметь тип String вместо Integer (или int).
Чтобы получить новое String представление UUID, которое вы называете UUID.randomUUID().toString().Результат этого вызова может быть присвоен клиенту id без выполнения какого-либо анализа.

Также обратите внимание, что подписи getter и setter должны соответственно изменяться.

В текущем методе setId() вы создаете новый id.Это переопределит id, назначенный при создании Customer с помощью вызова в конструкторе.Если вам нужна гибкость в назначении нового идентификатора, вы можете получить setId новую строку UUID и назначить ее как новый id для объекта Customer.

public class Customer{

    public Customer(String firstName, String lastName, String email, String address, String country){
       this.id.set(UUID.randomUUID().toString());
    }

    ...

    public String getId(){
       return this.id;
    }

    public void setId(String newId){
       this.id = newId;
    }
}

Примечание: Имя класса - Customer, а конструктор - Person.Это неправильно, оба должны иметь одинаковое имя.У вас должна быть какая-то ошибка компилятора, сообщающая вам об этом.Я предполагаю, что правильным именем класса и конструктора будет Customer

/ EDIT I ​​

Вариант использования UUID - это когда вам необходимо иметь уникальныйИдентификатор без проверки, если идентификатор уже существует с какой-либо другой стороной (например, ядро ​​базы данных или сервер в сетевом приложении без центрального сервера).

Если вы хотите использовать Integer (или Long) тамНет никакой реальной причины использовать случайное число, вы можете использовать порядковый номер для своих идентификаторов.

Если если в javafx есть отдельное приложение, и вы не используете разные потоки для параллельного создания клиентов, то вам не о чем беспокоиться.

С другой стороны, если это клиент-серверное приложение.Затем вы учитываете одновременный доступ клиентов к серверу.

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

Что касается методов получения и установки, getXxx() возвращает значение атрибута xxx.setXxx(123) установит или присвоит значение 123 атрибуту xxx;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...