Java 创建一个不可更改的ID

Java 创建一个不可更改的ID,java,declaration,Java,Declaration,我正在寻找一种在java中为对象生成不可更改ID的方法。我认为这是很基本的,但我是个初学者 如果这是我的代码: public class Node implements IXYNode { String id =""; String description =""; int x =0; int y =0; public XYNode(String id, int x, int y) { this.id=id; this.x=x; this.y=y; if(this

我正在寻找一种在java中为对象生成不可更改ID的方法。我认为这是很基本的,但我是个初学者

如果这是我的代码:

public class Node implements IXYNode
{
 String id ="";
 String description ="";
 int x =0;
 int y =0;

 public XYNode(String id, int x, int y)
 {
  this.id=id;
  this.x=x;
  this.y=y;

  if(this.id.equals(null) || this.id.isEmpty())
  {
   throw new IllegalArgumentException();
  }
 }    
}

所以一旦给了,以后就不应该改变了,提前谢谢

将id设为
final
,并且您不能再次分配它,除非它是构造函数或处于删除时间

final String id ="";
你可以做:

public class Node implements IXYNode
{
 private final String id ="";
 String description ="";
 int x =0;
 int y =0;

 public XYNode(String id, int x, int y)
 {
  this.id=id;
  this.x=x;
或者我认为更好的方法是:

 public XYNode(int x, int y)
 {
  this.id=UUID.randomUUID().toString(); //randomUUID
  this.x=x;

好的,尝试了这个,但是它在构造函数中说:“最终的字段XYNode.id无法分配”,所以我不理解的是:1。构造函数有责任创建一个新对象,对吗?并且ID在构造函数中作为参数给出,所以我也需要在构造函数中声明它,否则我错了吗?
final String ID。如果在声明时分配它,则不能在构造函数中重新分配它。@Johnny,因为在声明时您已经这样做了
String id=“”只允许分配一次。好的,但是如果我创建了这个类的一个新对象,如果这个对象是final的,会给它哪个ID?我想我自己的逻辑有一个问题,你要在创建对象时提供它,仅此而已。以后你不能再改了。