如何在Android开发中为常量变量存储单独的常量类

时间:2014-08-23 18:35:43

标签: java android variables constants

我在Android应用中有常量变量,如下所示。我想将它们移动到一个单独的常量类,以便它更清晰。你有什么建议?我在项目中创建了什么类型的文件,我只是在MainActivity类中导入该常量类?我要找的是类似于C ++中的constants.h文件。你们有什么建议?

public class MainActivity extends ActionBarActivity {


public static final String NET_SALE = "com.domain.mobile.tipcalculator.MESSAGE1";
public static final String SER_CHRG = "com.domain.mobile.tipcalculator.MESSAGE2";
public static final String TRN_IN = "com.domain.mobile.tipcalculator.MESSAGE3";
public static final String TRN_OUT = "com.domain.mobile.tipcalculator.MESSAGE4";
public static final String POOL = "com.domain.mobile.tipcalculator.MESSAGE5";
public static final String RADIO = "com.domain.mobile.tipcalculator.MESSAGE6";

5 个答案:

答案 0 :(得分:3)

您可以将它们存储在包含public static final个变量的类的文件中,并使用import static com.example.Constants.*来访问它们。

但是,我建议在strings.xml中存储呈现给用户的任何内容,以便可以翻译它们。

答案 1 :(得分:3)

常见的解决方案是创建一个类Constants,您可以在其中放置常量public static final。您还应该使此类不可实例化,因为它实际上是有意义的。所以你可以建立它的构造函数private

常用的另一个解决方案是创建一个类可以实现的接口。 像这样 - interface Constants和你的班级 - mainActivity implements Constants。通常它被认为不是很好的解决方案,因为接口通常用于显示类行为。您可以参考更多信息Effective Java - 第19项。

答案 2 :(得分:1)

或者我会建议枚举:

public enum Message{

  NET_SALE("com.domain.mobile.tipcalculator.MESSAGE1"),
  SER_CHRG("com.domain.mobile.tipcalculator.MESSAGE2"),
  TR_IN("com.domain.mobile.tipcalculator.MESSAGE3"),
  TR_OUT("com.domain.mobile.tipcalculator.MESSAGE4"),
  POOL("com.domain.mobile.tipcalculator.MESSAGE5"),
  RADIO("com.domain.mobile.tipcalculator.MESSAGE");
}

答案 3 :(得分:1)

我的问题是:这些常数在哪里使用?如果他们只在MainActivity中使用,那么他们应该保留在哪里。如果它们在多个位置使用(它们看起来不像 - 它们是Intent附加组件的键吗?)那么你应该研究一下这些值的基类是否有意义(protected)并且只从该类继承以传递它们。

如果您只是使用这些来提供额外内容并且不想让它们公开,您可以使用静态工厂方法创建新的Intent来启动Activity,在内部提供额外内容,并使这些常量private

public static Intent newIntent(Context ctx, String netSale, String serChrg, String trnIn,
                               String trnOut, String pool, String radio) {
    Intent intent = new Intent(ctx, MainActivity.class);
    intent.putExtra(NET_SALE, netSale);
    intent.putExtra(SER_CHRG, serChrg);
    intent.putExtra(TRN_IN, trnIn);
    intent.putExtra(TRN_OUT, trnOut);
    intent.putExtra(POOL, pool);
    intent.putExtra(RADIO, radio);
    return intent;
}

答案 4 :(得分:0)

Java中的

常量通常被声明为 public static final 。 因此,我们将在最终类中定义所有常量,如下所示:

public final class AppConstants {

public static final String EMAIL = "email";
public static final String ADDRESS = "address";
public static final String NAME = "name";

 // inner class
 public final class LANGUAGE {
    public static final String ENGLISH = "en";
    public static final String ARABIC = "ar";

    private LANGUAGE() {
    }
}

// private constructor to block initialisation
private AppConstants() {}

}

访问常量值,例如:

  • AppConstants .ADDRESS,//直接来自Appconstants类
  • AppConstants .EMAIL,
  • AppConstants.LANGUAGE .ENGLISH,//来自Appconstants的内部类Language
  • AppConstants.LANGUAGE .ARABIC。

希望它对某人有帮助!