在多个类中共享常量(android minesweeper)

时间:2012-04-20 11:46:32

标签: java android constants

我正在使用扩展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)
  {
  }
}

3 个答案:

答案 0 :(得分:8)

要分享内容,您可以在单独的类中创建常量并静态访问

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

然后在两个课程中你都可以Constants.UNTOUCHED

在这种情况下,我会避免使用幻数并用枚举替换它们。

enum DisplayStatus {
  Untouched, Uncovered, Flagged, Hit
}

并将所有int displayStatus替换为DisplayStatus displayStatus。现在,对于您和代码的其他读者来说,int代表了什么。

理想情况下,您始终希望使用特定类型来限制可能值的范围。在您的示例中,只有数字1-4有效,但您的类型与int一样宽,因此可以是任何值(例如-123543)。

祝你好运!

答案 1 :(得分:3)

  

在两个类中使用相同的常量声明的最佳方法是什么?

定义它们一次(例如,在PlayGameActivity中)并在两个地方使用它们(通过删除private修饰符)。如果你摆脱GridButtonPlayGameActivity.UNTOUCHED可以参考private等等。

答案 2 :(得分:2)

我认为枚举是前面提到的一个很好的解决方案。但是,由于您具有不同的网格按钮状态,因此可以考虑使用Java State design pattern。既然你是初学者,正如你所说,你可能会发现有点令人困惑甚至不必要,但我相信它会帮助你培养扎实的编程技巧。 最后我记得我自己开发了一个扫雷,虽然是普通的java,而不是android,我曾使用Observer pattern作为网格按钮。一旦一个按钮发生变化,它就会通知邻居也改变他们的状态。