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

Java Android开发中如何为常量变量存储单独的常量类,java,android,variables,constants,Java,Android,Variables,Constants,我在Android应用程序中有常量变量,如下所示。我想把它们移动到一个单独的常量类,这样它会更干净。你有什么建议?我应该在project中创建什么样的文件?我应该简单地在MainActivity类中导入那个常量类吗?我所寻找的与C++中的常数.h文件类似。你们有什么建议 public class MainActivity extends ActionBarActivity { public static final String NET_SALE = "com.domain.mobile.t

我在Android应用程序中有常量变量,如下所示。我想把它们移动到一个单独的常量类,这样它会更干净。你有什么建议?我应该在project中创建什么样的文件?我应该简单地在MainActivity类中导入那个常量类吗?我所寻找的与C++中的常数.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";

您可以将它们存储在一个包含公共静态最终变量的类的文件中,并使用import static com.example.Constants.*访问它们


但是,我建议将呈现给用户的任何内容存储在strings.xml中,以便对其进行翻译。

常见的解决方案是创建一个类常量,您可以将常量放入其中,使其公开。您还应该使这个类不可实例化,因为实例化它才有意义。因此可以将其构造函数设置为私有

另一个常用的解决方案是创建一个类可以实现的接口。
像这样-接口常量和类-main活动实现常量。通常认为它不是很好的解决方案,因为接口通常用于显示类行为。您可以参考有效Java的更多信息-第19项。

或者我建议使用枚举:

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");
}

我的问题是:这些常量在哪里使用?如果它们只在MainActivity中使用,那么它们应该保留在MainActivity中。如果它们被用于多个不同的位置,那么它们是意图附加的关键吗?然后,您应该研究让某个基类保护这些值,并从该类继承这些值以向下传递是否有意义

如果您只是使用这些来提供附加值,而不想将它们公开,那么可以使用静态工厂方法创建新的意图来启动活动,在内部提供附加值,并将这些常量设置为私有:

java中的常量通常声明为公共的、静态的和最终的。 因此,我们将在最后一个类中定义所有常量,如下所示:

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的内部类语言 AppConstants.LANGUAGE.阿拉伯语。
希望它能帮助别人

将它们设置为受保护,而不是公共。然后在代码中的任何地方调用它们,甚至其他活动或类,如MainActivity.NET\u。您可能希望创建一个单独的Java类,而不是使用MainActivity。我的建议是,为每个项目创建一个常量文件,并将与项目相关的常量粘贴到此文件中。这些变量不会显示给用户。它们将用于计算。所以我创建了另一个名为Constants.java的类,下面是它的内容。包com.domain.mobile.tipcalculator.app;公共类常量{public static final String NET_SALE=com.domain.mobile.tipcalculator.MESSAGE1;public static final String SER_CHRG=com.domain.mobile.tipcalculator.MESSAGE2;…这就是我导入它的方式,但它不起作用。导入com.domain.mobile.tipcalculator.app.Constants;错误消息是在主活动类中找不到符号变量。@fcukinyahoo请重读我的答案,你需要包括“静态”部分,你需要“.*”部分。谢谢。我有两个问题需要更好地了解。1.为什么需要静态。2.为什么*常量。*需要?谢谢你看到我之前的评论了吗?@fcukinyahoo这应该说明一切:
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() {}

}