-1

我有带有字段的 ServiceCard 类private int cardID,当我创建一个或多个 ServiceCard 实例时,我希望第一个实例有cardID=1,第二个实例有cardID=2,等等。

我尝试将 cardID 设为静态,但它没有用。

public class ServiceCard {
    private static int cardID;

    public ServiceCard() {
        setCardID(getCardID() + 1);
    }   

    public static int getCardID() {
        return cardID;
    }

    public static void setCardID(int cardID) {
        ServiceCard.cardID = cardID;
    }
}

当我进行测试时:

ServiceCard card = new ServiceCard();
System.out.println(card.getCardID());

ServiceCard card2= new ServiceCard();
System.out.println(card2.getCardID());

System.out.println(card.getCardID());

安慰:

1
2
2
4

1 回答 1

4

制作cardID static本身是行不通的。因为那时,您的所有实例在任何给定时刻都将具有相同的cardID 。

您需要static在您的类中有另一个字段,用于将增量值分配给id. 此外,在多线程应用程序的情况下,您可以使用AtomicInteger更适合作为原子计数器的替代:

import java.util.concurrent.atomic.AtomicInteger;

public class ServiceCard {

    private int cardID;
    private static AtomicInteger counter = new AtomicInteger(0);

    public ServiceCard() {
        cardID = counter.incrementAndGet();
    }
}

ServiceCard card1 = new ServiceCard();
ServiceCard card2 = new ServiceCard();

System.out.println(card1.getCardID());  // 1
System.out.println(card2.getCardID());  // 2
于 2013-10-05T14:38:56.040 回答