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; 
}