java const string_在Java中跨许多类共享常量string?

public static final String CONSTANT_STRING="CONSTANT_STRING";

常数应该是:

公开 – 这样就可以从任何地方访问它

静态 – 无需创build实例

最后 – 因为它的常数不能改变

按照Java命名约定应该大写,以便在Java文档中易于阅读和脱颖而出。

有些接口只是用来保持常量,虽然我没有看到任何理由这样做,也被认为是一个不好的做法,创造一个接口来保持常量,另一种方法是保持在它使更多的类感。

例如

JFrame具有EXIT_ON_CLOSE常量,任何JFrame子类都可以访问它,保留JFrame而不是JComponent也是有意义的,因为并不是所有的组件都有closures的选项。

你应该创build一个存储所有常量的常量类。

像ProjectNameConstants.java

其中包含所有常量string静态,因为您可以通过类名来访问它。

例如

classname : MyAppConstants.java public static final String MY_CONST="my const string val";

你可以像访问它一样

MyAppConstants.MY_CONST

正如@mprabhat之前回答的那样,常量应该是public , static , final ,并且用大写字母来input。

在课堂上将他们分组可以帮助您:

不需要知道你所有的常量。 许多IDE(如Eclipse)向您显示一个类所有的字段列表。 所以你只需按CTRL+SPACE就可以知道你可以使用哪些常量。

在编译时使它们变为安全types。 如果你使用了String ,你可能会拼错"DATABASE_EXCEPTION"和"DATABSE_EXSCEPTION" ,只有在执行时注意(如果你幸运的话,注意到它)。 您也可以利用自动完成function。

帮助您在执行过程中节省内存。 你只需要一个常量的实例的内存。 IE:(一个真实的例子)如果你在代码的不同类中有1000次String “DATABASE_EXCEPTION”,它们中的每一个在内存中将是不同的实例。

您可能还有其他一些考虑因素:

添加javadoc注释,所以使用常量的程序员可以在常量上有更多的语义信息。 当按CTRL+SPACE键时,它被显示为一个工具提示。 IE:

/** Indicates an exception during data retrieving, not during connection. */ public static final String DATABASE_EXCEPTION = "DATABASE_EXCEPTION"; /** Indicates an exception during the connection to a database. */ public static final String DATABASE_CONNECTION_EXCEPTION =" DATABASE_CONNECTION_EXCEPTION";

将语义添加到常量的标识符。 如果你有恒定的"Y" ,有时意味着是和其他时间年 ,考虑使用2个不同的常量。

public static final String Y = "Y"; // Bad public static final String YEAR = "Y"; public static final String YES = "Y";

如果将来决定改变常数的值,它将会对你有所帮助。

/** Year symbol, used for date formatters. */ public static final String YEAR = "A"; // Year is Año, in Spanish. public static final String YES = "S"; // Yes is Sí, in Spanish.

您可能不知道常量的价值,直到运行时。 IE:你可以从configuration文件中读取它们。

public class Constants { /** Message to be shown to the user if there's any SQL query problem. */ public static final String DATABASE_EXCEPTION_MESSAGE; // Made with the 2 following ones. public static final String DATABASE_EXCEPTION = "DATABASE_EXCEPTION"; public static final String MESSAGE = "MESSAGE"; static { DATABASE_EXCEPTION_MESSAGE = DATABASE_EXCEPTION + MESSAGE; // It will be executed only once, during the class's [first] instantiation. }

}

如果你的常量类太大,或者你认为将来它会增长太多,你可以把它分成不同的类来表示不同的含义(再次,语义): ConstantDB , ConstantNetwork等

缺点:

你们团队的所有成员都必须使用相同的类别和常量的相同术语。 在一个大型项目中,find2个定义并不奇怪:

public static final String DATABASE_EXCEPTION = "DATABASE_EXCEPTION"; public static final String EXCEPTION_DATABASE = "DATABASE_EXCEPTION";

分开数百行或不同的常量类。 甚至更糟糕的是:

/** Indicates an exception during data retrieving, not during connection. */ public static final String DATABASE_EXCEPTION = "DATABASE_EXCEPTION"; /** Indicates an exception during data retrieving, not during connection. */ public static final String EXCEPTION_DATABASE = "EXCEPTION_DATABASE";

不同的标识符,不同的值,具有相同的含义(并用于相同的目的)。

这可能会使可读性变差。 不得不写更多的做同样的事情:

if ("Y".equals(getOptionSelected()) {

VS

if (ConstantsWebForm.YES.equals(getOptionSeleted()) {

常量是如何在课堂上sorting的? 按字母顺序? 所有相关的常量在一起? 为了创build/需要它们? 谁应该对订单负责? 任何(足够大的)重新sorting的常量在版本系统中都会被视为一团糟。

那么,它比我预期的要长。 任何帮助/评论家都欢迎。

最佳实践是使用Java Enum(Java 5之后)

课堂教学的问题:

不是types安全的

没有命名空间

脆性

请检查Java文档。

public enum Constants { CONSTANT_STRING1("CONSTANT_VALUE1"), CONSTANT_STRING2("CONSTANT_VALUE2"), CONSTANT_STRING3("CONSTANT_VALUE3"); private String constants; private Constants(String cons) { this.constants = cons; } }

枚举可以用作常量。

编辑:你可以调用这个Constants.CONSTANT_STRING1

public class SomeClass { public static final String MY_CONST = "Some Value"; }

如果它应该是一个纯粹的常量类,那么使构造函数也是私有的。

public class Constants { public static final String CONST_1 = "Value 1"; public static final int CONST_2 = 754; private Constants() { } }

那么就不可能实例化这个类。

在你的主包(即com.yourcompany)的基础上创build一个名为Constants的类,并在其中包含所有常量。 另外使构造函数是私有的,所以不会从这个类创build对象:

public class Constants { private Constants() { // No need to create Constants objects } public static final String CONSTANT_ONE = "VALUE_CONSTANT_ONE"; public static final String CONSTANT_TWO = "VALUE_CONSTANT_TWO"; }

你应该把你的常量分成它们属于的组,并且将它们定义为public static final。 当你走的时候,看起来合适的是有定义你的常量的接口,但是抵制创build一个包含所有常量的单一接口的冲动。 这只是不好的devise。

创build一个公共class并为每个常量string创build一个像这样的字段

public static final String variableName = "string value";

public enum Constants { CONSTANT_STRING1("CONSTANT_VALUE1"), CONSTANT_STRING2("CONSTANT_VALUE2"), CONSTANT_STRING3("CONSTANT_VALUE3"); private String constants; private Constants(String cons) { this.constants = cons; } @JsonValue @Override public String toString() { return constants; }

}

使用它Constants.CONSTANT_STRING1.toString()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值