整数属性作为自动生成的数字

时间:2018-09-17 12:35:51

标签: java javafx

我正在创建一个简单的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 :(得分:2)

UUID字符串看起来像这样38400000-8cf0-11bd-b23e-10b96e4ef00d。您无法将此字符串解析为Integer。

如果要使用UUID作为客户的ID,则将属性声明为UUID或String而不是Integer。

编辑我

  

此外,我不需要将其存储为Integer值,字符串可以   工作,但在创建新的时却无法创建该号码   该类的实例。

要将UUID用作字符串: 在Customer类中,id属性必须为String类型,而不是Integer(或int)类型。
要获得String的新UUID表示形式,请调用UUID.randomUUID().toString()。可以将调用结果分配给客户的id,而无需进行任何解析。

还请注意,gettersetter的签名必须进行相应的更改。

在当前的setId()方法中,您将创建一个新的id。这将覆盖使用构造函数中的调用创建客户时分配的id。如果希望灵活分配新的ID,可以让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

/编辑我

UUID的用例是当您需要一个唯一的ID而无需检查该ID是否已与其他方(例如,数据库引擎或网络应用程序中没有中央服务器的服务器)存在时。

如果您要使用的是Integer(或Long),则没有真正的理由使用随机数,则可以为ID使用序列号。

如果javafx中的应用程序是一个独立的应用程序,并且您没有使用不同的线程并行创建客户,那么您不必担心更多。

另一方面,如果它是客户端服务器应用程序。然后,请记住客户端对服务器的并发访问。

如果在数据库中将ID创建作为一个序列委派,则数据库本身会处理并发问题或ID中的重复项。这可能是同一客户表(假设您使用的是一个)中的一个自动递增字段,一个序列或一个充当序列的表。另一方面,如果是您的一类将要一一生成id,那么您将不得不处理并发请求。您将必须确保一次只有一个线程可以递增id。

关于getter和setter,getXxx()返回xxx属性的值。 setXxx(123)会将值123设置或分配给属性xxx