Java常量文件

Van*_*nel 22 java android constants

我正在开发一个Android应用程序,我是Java和Android的新手.

我想创建一些常量用于某些活动.我在哪里可以定义这些常量?

谢谢.

DJC*_*rth 50

在java和大多数OO语言中,仅仅为了保存常量来定义一个类被认为是不好的做法.在与它们相关联的类中定义常量要好得多.通常有一个.例如

interface MyComponent {
  /** The default height for a component */
  public static final int DEFAULT_HEIGHT = 5;
  // other stuff
}
Run Code Online (Sandbox Code Playgroud)

如果真的没有人随意定义一个单独的类.

编辑:这里的关键是:

  1. 使常量易于查找.如果有一个"自然"放置它们,请将它们放在那里(即Component对象的默认高度属于Component类).
  2. 没有比你需要的更高的耦合.将所有常量放在一个'常量'类中会产生高耦合,尤其是后续修饰符往往会将所有常量放在Constants类中,无论是否还有其他类可以自然放入.
  3. 仅仅因为一个常量被多个类使用并不意味着它应该在'常量'类中.如果'Application' 和使用Application类的类使用常量,则将其放在Application类中.这样你就不会增加耦合.

  • 变量不能在界面内.我相信,常量应该是与所有实现接口的类相关的.如果所有类都使用了常量,那么将它们放在一个Constants类中(如上所述).如果它们用于配置应用程序,那么它们可能属于Application类.它们的关键是使它们易于查找,而不是与任何类别的高耦合.如果不小心处理,常量类往往是高度耦合的. (3认同)

bil*_*dev 18

通常,您使用Constants类,或者在使用它们的类中定义它们,la:

class Constants {
   public static final int NUM_TRIANGLES = 4;
   public static final String SOME_TEXT = "This is a constant";
}
Run Code Online (Sandbox Code Playgroud)

然后你会通过以下方式来引用它们:

String inst = Constants.SOME_TEXT;
Run Code Online (Sandbox Code Playgroud)

  • 我知道你刚刚展示的例子,但我想强调一个人不应该使用CONST_作为常量的前缀.ALL_CAPS是表示常量的标准方式. (8认同)

Kde*_*per 7

最常见的方法是在需要时在类中创建" 常量 ":

class Example { 
  private static final int FILENAME = "test.txt; 
} 
Run Code Online (Sandbox Code Playgroud)

它也可以声明为default,protected或public,而不是private .虽然定义常量被认为是一种OO 反模式,但它是一个特殊的"常量"(上帝)类,它存储整个应用程序的常量.或者,您也可以将配置数据存储在Java属性文件中,这不被视为反模式.

另一种迅速普及的选择是使用依赖注入(DI)模式.此模式通常用于依赖对象,但它也可用于将常量值注入对象.例如,可以使用Google的轻量级Guice DI框架实现:

class Example {
  String filename;

  @Inject
  public Example(@ConfigFilename String filename) {
     this.filename = filename;        
  }
Run Code Online (Sandbox Code Playgroud)

在一个特殊的Binder类中,您将一个值绑定到使用@ConfigFilename注释的字符串.这样,您可以独立测试最小的耦合和类.