我的属性文件中有很多值,这些值在我的应用程序中读取以设置值(数据库连接、电子邮件服务器等)。
数据库属性:
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
调用中使用。那么为什么不重命名类 PropertyUtils
或 ConfigUtils
,并具有使用属性名称的匹配静态方法。然后,如果某些属性是可选的,您可以添加默认属性值。
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/