3

我正在使用扩展按钮创建一个类的实例并直接访问一个整数变量以获得更好的性能。我正在使用常量来轻松识别变量的当前设置。

我在 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 DisplayStatus {
  Untouched, Uncovered, Flagged, Hit
}

并将您的所有内容替换int displayStatusDisplayStatus displayStatus. 现在,您和代码的其他读者清楚地知道它int代表了什么。

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

祝你好运!

于 2012-04-20T11:50:36.013 回答
3

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

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

于 2012-04-20T11:49:55.770 回答
2

我认为枚举是一个很好的解决方案,如前所述。但是,由于您有不同的网格按钮状态,您可以考虑使用 Java State 设计模式。正如您所说,由于您是初学者,您可能会觉得这有点令人困惑甚至是不必要的,但我相信它会帮助您培养扎实的编程技能。最后,我记得我自己开发了一个扫雷器,不过是用纯 Java 而不是 android 开发的,并且我使用了观察者模式作为网格按钮。一旦一个按钮发生变化,它就会通知相邻的按钮也改变它们的状态。

于 2012-04-20T12:17:05.397 回答