0

一意のIDを持つオブジェクトの束を作成しようとしています。これを実装するための私の最初のアイデアは、オブジェクトの量をカウントする静的変数を持つことでした。オブジェクトが作成されるたびに、静的変数は1ずつ増加し、オブジェクトのIDとして書き留められます。

喜んで、私はこのようにコードを実装しました:

    public class Order {
        static int totalOrdersPlaced;
        public int orderID;

        public void Order() {
            totalOrdersPlaced++;
            orderID = totalOrdersPlaced;
        }
    }

...これは、私が大まかに理解している理由で、「非静的フィールドへの静的参照を作成できません」というエラーをスローします。しかし、私は自分が望むものを実装する方法を完全に理解することはできません。

tl; dr:プログラムに静的変数の現在の値を取得させて保存させるにはどうすればよいですか?

4

3 に答える 3

3

質問のコードはコンパイルされます。あなたの本当のコードはpublic static void Order()代わりに持っていますか?

いずれにせよ、コンストラクターでこれを行うつもりだったと思いますので、:を削除してvoidください

public class Order {
    private static int totalOrdersPlaced;
    public final int orderID;

    public Order() {
        totalOrdersPlaced++;
        orderID = totalOrdersPlaced;
    }
}
于 2013-02-28T01:36:26.140 に答える
1
 public class Order {
    static int totalOrdersPlaced;
    public int orderID;

    public void Order() {
        totalOrdersPlaced++;
        orderID = totalOrdersPlaced;
    }
}

メソッドをコンストラクターに変換すると機能Order()します(を削除しますvoid)。

テストコードは次のとおりです。

 public class Order {
    static int totalOrdersPlaced;
    public int orderID;

    public Order() {
        totalOrdersPlaced++;
        orderID = totalOrdersPlaced;
    }
    public static void main(String[] args) {
    Order order = new Order();
    System.out.println(order.totalOrdersPlaced);
    Order order2 = new Order();
    System.out.println(order2.totalOrdersPlaced);
}
}

証明: http: //ideone.com/n06npg

于 2013-02-28T01:40:40.087 に答える
1

で削除voidします

 public void Order() {
            totalOrdersPlaced++;
            orderID = totalOrdersPlaced;
        }

コンストラクターはリターン型であってはなりません

..もともとMattBallによって識別されました

必要な変数のゲッターとセッターを生成し、ゲッターメソッドを使用して値を取得します。

于 2013-02-28T01:35:30.217 に答える