Хорошей идеей будет написать небольшого частного помощника для подобных случаев. Они могут обрабатывать правильные приведения, сообщения об ошибках и значения по умолчанию.
Хорошо поместить достаточно «состояния» операции в исключение (в этом случае имя опции и значение - возможно, даже строковое представление карты опций, если она не найдена).
Что-то вроде:
private long safeGetLong(Map<String, Option> options, String name) {
if (name == null || options == null)
throw new IllegalArgumentExcption("You need to give options and name. (name="+name+", opts=" + options));
Object val = options.get(name);
if (val == null)
throw new ConfigurationException("The option name="+name+" is unknown");
if (val instanceof Long)
return val.longValue();
String strVal = null;
try
{
strVal = val.toString();
return Long.parseValue(strVal);
} catch (Exception ex) {
throw new ConfigurationException("Cannot parse " + name + "=" + strVal + " into a Long.");
}
}
Конечно, наличие объекта конфигурации, который обеспечивает типизированный доступ, еще лучше.
Существует несколько платформ валидации, которые могут сделать это для вас, но я обычно заканчиваю тем, что пишу код сам, так как он лучше вписывается в IN8L и исключения исключений или соглашения о ведении журнала рассматриваемого приложения. Трудно сделать это универсальным.