java - 在我的应用程序中共享静态字符串的策略

原文 标签 java string variables static share

我在属性文件中有很多值,这些值在我的应用程序中读取以设置值(数据库连接,电子邮件服务器等)。

db.properties:

db.user=admin
db.pwd=secret1234


现在在我的DatabaseService类中,我有类似以下内容:

private static final String DB_USER = "db.user";
private static final String DB_PWD = "db.pwd";
private Properties dbProps = new Properties();
// read db.properties values into dbProps
String user = dbProps.getProperty(DB_USER);


然后在我的DatabaseServiceTest类中,重复了代码:

private static final String DB_USER = "db.user";
private static final String DB_PWD = "db.pwd";
private Properties dbProps = new Properties();
// read db.properties values into dbProps
String user = dbProps.getProperty(DB_USER);


所以我重复了代码。因此,我改为将静态String值放入托管所有Strings的StaticVars类中,因此DatabaseService和DatabaseServiceTest现在看起来像这样(我也可以将Properties放在实用工具类中,但是此示例有很多分数,所以我到目前为止):

private Properties dbProps = new Properties();
// read db.properties values into dbProps
String user = dbProps.getProperty(StaticVars.DB_USER);


有没有更好的方法可以在多个类文件之间共享静态字符串?我当前的StaticVars类具有约150个静态String值,并且还在不断增长。看来我走错了路。

谢谢,
    肖恩

最佳答案

我认为您的通用方法-使用公共​​类的public static final String成员-是在应用程序之间共享字符串的一种好方法。

但是,请不要低估命名的重要性。在6个月内再次使用此代码时,您是否还记得属性的名称存储在名为StaticVars的类中?如果您确实只存储属性名称,则该类应该称为PropertyNames。现在,您已经限制了类的范围,并且不太可能将字符串混入错误消息或正则表达式等中。 (那些应该使用有意义的名称进入不同的类,以帮助您记住它们存储哪种类型的值。)

进一步,由于这些是属性名称,因此很可能在getProperty调用中使用它们。因此,为什么不重命名类PropertyUtilsConfigUtils,并具有使用属性名称的匹配静态方法。然后,如果某些属性是可选的,则可以添加默认属性值。

   public static final String DB_HOST = "db.host";
   public static final String DB_USER = "db.user";
   public static final String DB_PWD = "db.pwd";

   public static String getDbHost(Properties props)
   {
      return props.getProperty(DB_HOST, "localhost");
   }
   public static String getDbUser(Properties props)
   {
      return props.getProperty(DB_USER, "admin");
   }
   public static String getDbPwd(Properties props)
   {
      return props.getProperty(DB_PWD);
   }

关于java - 在我的应用程序中共享静态字符串的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18748875/

相关文章:

java - 如何重复使用几行?

templates - 在 jinja 的循环中求和一个值

java - 错误:CompassADFAdaptor类型的方法convertProspectIds(Map <String,String>)不适用于参数(List <String>)

javascript - 如何使JavaScript中所有单词的首字符大写?

java - 从字符串数组中删除空值的最佳方法

java - Android- 从字符串中删除 URL 百分比符号

java - 方法在Java中什么都不返回

java - 如何实现可迭代的类并公开真正的不可变的API?

java - 如何在同一个类(Java)中的另一个方法中引用一个方法中的变量?

c# - C#中的未初始化变量