【问题标题】:Java Defining String constants with same variable name and valueJava定义具有相同变量名和值的字符串常量
【发布时间】:2016-08-01 04:10:25
【问题描述】:

大多数时候,我定义为

public static final String PROCESS_ID ="PROCESS_ID";
public static final String CONTRACT_ID ="CONTRACT_ID";

//It ends up doing lot like this
public static final String VARIABLE_NAME ="VARIABLE_NAME";
public static final String OTHER_NAME ="OTHER_NAME";

摆脱这种情况的好习惯是什么? 代码审查总是说“不要硬编码,使用常量”

枚举是更好的方法吗?

【问题讨论】:

  • 为什么不使用final
  • 将这些设为枚举的 2 个问题:1) 您必须显式转换为 String 才能在当前使用 String 的地方使用它们; 2)你可能会在同一个枚举中得到不相关的“常量”;或者很多枚举。
  • @AndyTurner ,在整个项目中定义这种字符串看起来并不酷。寻找任何替代方法来做到这一点。
  • 不清楚你为什么要这样做,或者它打算解决什么样的问题。在您进行编辑之前,它更有意义。现在没有意义了。
  • 将它们全部放在一个类中...

标签: java string constants


【解决方案1】:

这样做可以让您和未来的开发人员轻松地更改可能在应用程序的多个区域中使用的内容。

例如,DAO 中的表名。如果您在常量中定义表名,则意味着对表名的更改只需要一次更改,而不是在多个位置更新表名。

摆脱这种情况的好习惯是什么?

查看贵公司的编码风格指南并遵循他们的要求。如果您只是自己编写代码,请制定自己的准则并尝试始终如一地遵循它们。

枚举是更好的方法吗?

可以。如果您需要在任何类型的列表中处理这些常量,或者如果每个常量都有其他关联的常量,则枚举可能是合适的。同样,请查阅您的编码指南或制定一些编码指南。

【讨论】:

    【解决方案2】:

    更好的做法是:

    public static final ContractualInfo CONTRACT = new ContractualInfo(0, "CONTRACT_ID");
    
    public static final ContractualInfo PROCESS = new ContractualInfo(1, "PROCESS_ID");
    

    【讨论】:

    • 你能解释一下为什么你认为这更好吗?
    • 这取决于你的用例(你为什么这样做)。但从一般的角度来看,如果你这样做:new myWorker(CONTRACT) new myWorker("CONTRACT_ID") 更好,因为你可以做类似new myWorker("WHATEVERIWANT") 这样的事情,你让任何使用你的类的人只会提供对你的类有意义的数据。跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    相关资源
    最近更新 更多