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

时间:2013-09-11 18:41:38

标签: 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值放到一个包含所有字符串的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值,并且还在增长。好像我走错了路。

谢谢,     肖恩

1 个答案:

答案 0 :(得分:0)

我认为您的一般方法 - 使用公共类的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);
   }