Я нахожу вопрос немного запутанным, потому что он говорит о (1) разборе и (2) с использованием настроек конфигурации, но примеры кода предназначены только для последних , Эта путаница означает, что мой ответ может не иметь отношения к тому, что вы намеревались спросить. Во всяком случае ...
Я предлагаю подход, который иллюстрируется следующим API псевдокода (комментарии следуют позже):
class Configuration
{
void parse(String fileName);
boolean exists(String name);
String lookupString(String name);
String lookupString(String name, String defaultValue);
int lookupInt(String name);
int lookupInt(String name, int defaultValue);
float lookupFloat(String name);
float lookupFloat(String name, float defaultValue);
boolean lookupBoolean(String name);
boolean lookupBoolean(String name, boolean defaultValue);
... // more pairs of lookup<Type>() operations for other types
}
Операция parse()
анализирует файл конфигурации и сохраняет проанализированные данные в удобном формате, например, в карте или хэш-таблице. (Если вы хотите, parse()
может делегировать разбор сторонней библиотеке, например, анализатору XML, свойств Java, JSON, .ini и т. Д.)
После завершения анализа ваше приложение может вызывать другие операции для извлечения / использования настроек конфигурации.
Операция lookup<Type>()
извлекает значение указанного имени и анализирует его в указанном типе (и выдает исключение в случае сбоя синтаксического анализа). Для каждой операции lookup<Type>()
есть две перегрузки. Версия с одним параметром выдает исключение, если указанная переменная не существует. Версия с дополнительным параметром (обозначающим значение по умолчанию) возвращает это значение по умолчанию, если указанная переменная не существует.
Операция exists()
может использоваться для проверки того, существует ли указанное имя в файле конфигурации.
Приведенный выше API псевдокода предлагает два преимущества. Во-первых, он обеспечивает безопасный тип доступа к данным конфигурации (что не было заявленным требованием в вашем вопросе, но я думаю, что это важно в любом случае). Во-вторых, он позволяет различать «переменная не определена в конфигурации» и «переменная определена, но ее значение является пустой строкой».
Если вы уже посвятили себя определенному синтаксису конфигурации, то просто реализуйте вышеуказанный класс Configuration
в качестве тонкой оболочки для синтаксического анализатора для существующего синтаксиса конфигурации. Если вы еще не выбрали синтаксис конфигурации и если ваш проект находится на C ++ или Java, вы можете обратиться к моей библиотеке Config4 *, которая предоставляет готовую к использованию реализацию вышеупомянутого класс псевдокода (с несколькими дополнительными прибамбасами).