mpr*_*hat 46
public static final String CONSTANT_STRING="CONSTANT_STRING";
Run Code Online (Sandbox Code Playgroud)
常数应该是:
有些情况下接口仅用于保持常量,虽然我没有看到任何理由这样做,并且创建一个接口来保持常量也被认为是一种不好的做法,另一种方法是将它保留在更多的接口中感.
例如
JFrame有EXIT_ON_CLOSE含量的不同,它的子类的任何类JFrame将有机会获得它,它也是情理之中的保持JFrame,而不是在JComponent不所有组件都将被关闭的选项.
J.A*_*.L. 21
正如@mprabhat之前回答的那样,常量应该是public,static和final,并用大写字母输入.
在课堂上将它们分组可以帮助您:
不需要知道你拥有的所有常数.许多IDE(如Eclipse)向您显示类所有字段的列表.因此,您只需按下CTRL+SPACE并获得可以使用的常量的线索.
在编译时使它们类型安全.如果您使用的StringS,你可能拼错"DATABASE_EXCEPTION"带"DATABSE_EXSCEPTION",并在执行过程中只注意到(如果你是幸运的,并在所有注意到它).您还可以从自动完成中获利.
帮助您在执行期间节省内存.你只需要1个常量实例的内存.IE :(一个真实的例子)如果你String在代码中的不同类中有"DATABASE_EXCEPTION"1000次,那么它们中的每一个都将是内存中不同的实例.
您可能有的其他一些注意事项:
添加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";
Run Code Online (Sandbox Code Playgroud)将语义添加到常量的标识符.如果你有常数"Y",有时意味着是和其他年份,请考虑使用2个不同的常数.
public static final String Y = "Y"; // Bad
public static final String YEAR = "Y";
public static final String YES = "Y";
Run Code Online (Sandbox Code Playgroud)
如果将来决定更改常量的值,它将对您有所帮助.
/** 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.
Run Code Online (Sandbox Code Playgroud)在运行时之前,您可能不知道常量的值.IE:您可以从配置文件中读取它们.
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.
}
Run Code Online (Sandbox Code Playgroud)
}
:如果您的常量类是太大,或者你假设它会在未来的增长太多,你可以在不同类不同的含义(同样,语义)将其划分ConstantDB,ConstantNetwork等等.
缺点:
团队的所有成员都必须使用相同的类,并对常量使用相同的术语.在一个大型项目中,找到2个定义并不奇怪:
public static final String DATABASE_EXCEPTION = "DATABASE_EXCEPTION";
public static final String EXCEPTION_DATABASE = "DATABASE_EXCEPTION";
Run Code Online (Sandbox Code Playgroud)
分隔数百行或不同的常数类.甚至更糟:
/** 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";
Run Code Online (Sandbox Code Playgroud)
不同的标识符,对于不同的值,具有相同的含义(并用于相同的目的).
它可能会使可读性变差.为了做同样的事情,必须写更多:
if ("Y".equals(getOptionSelected()) {
Run Code Online (Sandbox Code Playgroud)
VS
if (ConstantsWebForm.YES.equals(getOptionSeleted()) {
Run Code Online (Sandbox Code Playgroud)如何在课堂上订购常数?按字母顺序?所有相关的常数在一起?为了创建/需要它们?谁应该对订单的正确性负责?任何(足够大的)常量重新排序都会被视为版本控制系统中的混乱.
嗯,这比我预期的要长.欢迎任何帮助/评论家.
Hem*_*lia 17
您应该创建一个存储所有常量的常量类.
像ProjectNameConstants.java
它包含所有常量字符串静态,因为您可以通过类名访问它.
例如
classname : MyAppConstants.java
public static final String MY_CONST="my const string val";
Run Code Online (Sandbox Code Playgroud)
你可以访问它
MyAppConstants.MY_CONST
Run Code Online (Sandbox Code Playgroud)
最佳实践是使用Java Enum(After Java 5之后)
课堂方法的问题:
请检查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;
}
}
Run Code Online (Sandbox Code Playgroud)
枚举可以用作常量.
编辑:你可以打电话给这个Constants.CONSTANT_STRING1
| 归档时间: |
|
| 查看次数: |
57140 次 |
| 最近记录: |