在我的節目,我宣佈一個靜態變量:獲取靜態的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