在我的节目,我宣布一个静态变量:获取静态的Java方法返回最高变量值
private static int nextID = 0;
这是我在构造函数中使用
Vehicle() {
idNum = nextID++
}
基本上,这是做什么的,是确保每次我制作一个新的Vehicle对象时,它都会有一个唯一的标识号。现在我想创建一个静态方法来返回目前使用的最高ID号。我会怎么做?然而
在我的节目,我宣布一个静态变量:获取静态的Java方法返回最高变量值
private static int nextID = 0;
这是我在构造函数中使用
Vehicle() {
idNum = nextID++
}
基本上,这是做什么的,是确保每次我制作一个新的Vehicle对象时,它都会有一个唯一的标识号。现在我想创建一个静态方法来返回目前使用的最高ID号。我会怎么做?然而
你可以只返回nextID
当前值...
请注意,您的类不是线程安全的。换句话说,如果同时创建两个不同的对象,他们都可以获得相同的“唯一”ID。 为了防止这种情况,你需要某种锁定。
private static int nextID = 0;
private static Object lockObj = new Object();
public static int highestID()
{
synchronized(lockObj)
{
return nextID-1;
}
}
public Vehicle() {
synchronized(lockObj)
{
idNum = nextID++;
}
}
这假定类*需要*是线程安全的。如果不这样做,那么同步等是不必要的,最好不要这样做。 – 2013-04-08 03:37:24
Nah,'volatile'将会完成这项工作。 – Mordechai 2013-04-08 04:23:53
你很好地回答了你自己的问题。由于每次创建对象时,您的nextID
变量都在不断增加,所以每次抓取该变量的值时,它总是最高的。正如你所说的,你所需要的就是创建一个返回当前值nextID
的静态方法。简单地说:
public static int getNextID(){
return nextID;
}
想通了!
Public static int highestID() {
return nextID;
}
您已拥有'nextID'。 – chris 2013-04-08 03:15:29
'public static int getNextId(){return nextID; }' – Reimeus 2013-04-08 03:16:21