我在属性文件中有很多值,可以在我的应用程序中读取设置值(数据库连接,电子邮件服务器等)。
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值,并且还在增长。好像我走错了路。
谢谢, 肖恩
答案 0 :(得分:0)
我认为您的一般方法 - 使用公共类的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);
}