我制作了这个生成ID号的方法:
public String setID() {
UUID id = UUID.randomUUID();
String numericUUID = String.valueOf(Math.abs(Integer.parseInt(Byte.toString((byte) id.getMostSignificantBits()))));
return numericUUID;
}
现在,我想将生成的每个数字分配给一个特定的对象,例如:
employee emp1 = new employee("sarah", 2500,300);
我怎样才能用最简单的方法做到这一点?
让我们看看您的代码。您的方法setId
没有设置ID,因此名称具有误导性,或者您希望具有不同的功能。
该代码生成一个类型4的UUID,并获得其最高有效64位。然后,有一个类型为byte
的强制转换,即只有效地使用UUID的最高有效64位中的低8个有效位。8位是范围从-128到127的256个不同值。然后将它们转换为String,将此String解析为int,计算其绝对值并将其转换回String。
最后,您将获得一个介于0和255(包括255(之间的随机值,表示为String,也可以通过例如Integer.toString((int)(Math.random() * 256))
或rand.nextInt(256)
获得,其中rand
的类型为java.util.Random
。
回到方法的命名。目前尚不清楚这是一个实用程序方法,还是Employee类的一部分(顺便说一句:类型名称按照惯例是用Java中的UpperCamelCase编写的,所以它是Employees类而不是Employee(。
我假设您希望此方法是Employee类的一部分,那么问题是,如何设置某个员工的ID?
public class Employee {
private String id; // the id of the employee
public final void setId() {
id = Integer.toString((int)(Math.random() * 256));
}
// ...
}
如果您现在致电
Employee emp1 = new Employee("sarah", 2500,300);
emp1.setId();
将设置emp1的id。通常情况下,您希望在构造对象时发生这种情况,因此在构造函数内部调用此方法。然后,您可以选择将此方法设为私有方法,以防止它被其他类型的对象调用(封装功能(。
除此之外,您应该考虑直接使用UUID(例如成员变量声明private UUID id;
(,因为256中的随机数很可能会产生重复,这不是ID的目的。