3

extends Buttonを使用してクラスのインスタンスを作成し、パフォーマンスを向上させるために整数変数に直接アクセスしています。変数の現在の設定を簡単に識別するために定数を使用しています。

Buttonクラスとそれらをインスタンス化するActivityクラスの両方で定数を宣言しています。私は同様の質問を見つけ、定数を保持するためだけにクラスを作成するのは良い習慣ではないことを読みました。

両方のクラスで同じ定数宣言を使用するための最良の方法は何ですか?

私は初心者プログラマーなので、単純な解決策を見落としている可能性があります。

ボタンクラス:

public class GridButton extends Button {
  public int displayStatus;

  // constants for mine display status
  private static final int UNTOUCHED = 1;
  private static final int UNCOVERED = 2;
  private static final int FLAGGED = 3;
  private static final int HIT = 4;
  ...
}

アクティビティクラス:

public class PlayGameActivity extends Activity {      
  private GridButton[][] gridButtons;      

  // constants for mine display status
  private static final int UNTOUCHED = 1;
  private static final int UNCOVERED = 2;
  private static final int FLAGGED = 3;
  private static final int HIT = 4;
  ...

  // e.g. accessing displayStatus value
  if (gridButtons[currentRow][currentColumn].displayStatus == FLAGGED)
  {
  }
}
4

3 に答える 3

8

物事を共有するには、別のクラスで定数を作成し、静的にアクセスできます

class Constants {
  public static final int UNTOUCHED = 1;
}

そして、両方のクラスに行くことができますConstants.UNTOUCHED

この場合、マジック ナンバーの使用を避け、それらを Enum に置き換えます。

enum DisplayStatus {
  Untouched, Uncovered, Flagged, Hit
}

そして、すべてを に置き換えint displayStatusますDisplayStatus displayStatusintこれで、コードが何を表しているかは、あなたや他のコードの読者には明らかです。

可能な値の範囲を制限するために、常に特定の型を使用することが理想的です。あなたの例では、1〜4の数字のみが有効ですが、タイプは an と同じくらい広いintので、任意の値(-1or など23543)にすることができます。

幸運を!

于 2012-04-20T11:50:36.013 に答える
3

両方のクラスで同じ定数宣言を使用する最良の方法は何ですか?

それらを 1 回 (たとえば、 で) 定義し、両方の場所から (修飾子PlayGameActivityをドロップして) 使用します。を取り除くと、 などを参照できます。privateGridButtonPlayGameActivity.UNTOUCHEDprivate

于 2012-04-20T11:49:55.770 に答える
2

前述のように、列挙型は良い解決策だと思います。ただし、グリッドボタンの状態はさまざまであるため、JavaStateデザインパターンの使用を検討できます。あなたは初心者なので、あなたが言うように、少し混乱し、不必要でさえあるかもしれませんが、それはあなたが確かなプログラミングスキルを開発するのに役立つと信じています。最後に、AndroidではなくプレーンJavaでマインスイーパを自分で開発し、グリッドボタンにObserverパターンを使用したことを覚えています。1つのボタンが変更されると、隣接するボタンにも状態を変更するように通知されました。

于 2012-04-20T12:17:05.397 に答える