-1

フィールドを持つ ServiceCard クラスがあり、ServiceCard のprivate int cardID1 つ以上のインスタンスを作成するときに、最初のインスタンスcardID=1に 、2 番目のインスタンスに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 に答える