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

标签 java string variables static share

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

数据库属性:

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 值,并且还在不断增加。看来我走错了路。

谢谢, 肖恩

最佳答案

我认为您的一般方法 - 使用公共(public)类的 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 - 一行java代码及其作用?

javascript - 使用循环返回子集

java - 如何从cq5中的子页面获取数据?

java - Android - 检测移动到后台和前台的应用程序

java - 屏幕卡住直到函数返回

java - 如何使用制表符格式化输出以使表格看起来清晰

ruby-on-rails - 如何让变量保留 2 位小数

linux - 打印包含命令的变量

php - 使用表单选项值作为 PHP 变量来执行准备好的 SQL 语句

java - 如何使用 Spring 数据 jpa 更新实体