2013-04-08 57 views
-1

在我的節目,我宣佈一個靜態變量:獲取靜態的Java方法返回最高變量值

private static int nextID = 0; 

這是我在構造函數中使用

Vehicle() { 

    idNum = nextID++ 

} 

基本上,這是做什麼的,是確保每次我製作一個新的Vehicle對象時,它都會有一個唯一的標識號。現在我想創建一個靜態方法來返回目前使用的最高ID號。我會怎麼做?然而

+0

您已擁有'nextID'。 – chris 2013-04-08 03:15:29

+3

'public static int getNextId(){return nextID; }' – Reimeus 2013-04-08 03:16:21

回答

5

你可以只返回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++; 
    } 
} 
+1

這假定類*需要*是線程安全的。如果不這樣做,那麼同步等是不必要的,最好不要這樣做。 – 2013-04-08 03:37:24

+0

Nah,'volatile'將會完成這項工作。 – Mordechai 2013-04-08 04:23:53

2

你很好地回答了你自己的問題。由於每次創建對象時,您的nextID變量都在不斷增加,所以每次抓取該變量的值時,它總是最高的。正如你所說的,你所需要的就是創建一個返回當前值nextID的靜態方法。簡單地說:

public static int getNextID(){ 
    return nextID; 
} 
2

想通了!

Public static int highestID() { 

    return nextID; 
}