对我来说,这已经足够了
public class DirecoryWatcher{
private static String FOLDER;
public static synchronized getFolder(){
if(FOLDER == null){
// FOLDER = your loading code
}
return FOLDER;
}
}
确保将从文件中读取的值分配给静态字段,以确保只读取一次。
此外,同步方法是访问资源的好习惯,在这种情况下它不是完全强制的,因为您只是在读取文件。
您还可以使此方法可扩展以读取作为参数给出的任何属性。为了清楚起见,我对 FOLDER 进行了硬编码。
public class DirectoryWatcher{
private static Map<String,String> properties = new HashMap<String,String>();
public static synchronized getValueFor(String prop){
String result = null;
if( !properties.keySet().contains(prop)){
result = // your loading code
properties.put(prop, result);
}else{
result = properties.get(prop);
}
return result;
}
}
此代码将为您提供线程安全性并支持任何给定数量的属性。它还增强了代码的封装,您可以为其添加一些逻辑(您不仅仅是公开文件的内容)。
此外,在这种情况下,直到第一次需要属性才会加载。如果从未使用过某个属性,则不会读取该属性。这提高了您的内存使用率,您不会在不需要的值上浪费内存。
要考虑的另一件重要事情是,通过此实现,您的属性加载器类可以非常轻松地处理错误和异常。使用另一种方法,您将处理问题的责任委托给请求该属性的对象。