Для меня это было бы достаточно просто
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;
}
}
Этот код предоставит вам защиту от потоков и поддержку для любого заданного количества свойств. Это также улучшает инкапсуляцию вашего кода, вы можете добавить к нему некоторую логику (вы не просто просматриваете содержимое своего файла).
Кроме того, после этого случая свойства не загружаются до тех пор, пока они не потребуются в первую очередь. Если свойство никогда не используется, оно не будет считано. Это улучшает использование памяти, вы не тратите память на ценности, которые вам не нужны.
Еще одна важная вещь, которую следует учитывать, заключается в том, что с этой реализацией ваш класс загрузчика свойств может справиться с ошибками и исключениями очень легко. С помощью другого подхода вы делегируете ответственность за обработку проблем объекту, который запрашивал свойство.
Лучшей практикой является использование соглашений об именах Java. –
Вам не нравится FOLDER в верхнем регистре? – prilia
Мне нравится быть окончательным. –