Почему я получаю это необработанное исключение?
Используя интерфейс для обработки констант, я не могу вызвать предопределенный метод, который выдает исключение.
public interface ParametresConstantes {
public static final String DB_CONNEXION = ChargementProjetProperties.getInstance().getValueByKey("conn");
//a red line under the right part of this instruction.
public static final int SIZE_TEXT_FIELD = 20;
}
public String getValueByKey (String key) throws Exception
{
String value = null;
load();
if (props.containsKey(key))
{
value = props.getProperty(key);
}
else
{
throw new Exception ("no key found");
}
return value;
}
Как это исправить?
РЕДАКТИРОВАТЬ
Как обсуждено ниже, поскольку статический блок может работать не только на интерфейсе, но и на классе, его реализующем, а переменная является конечной и не может быть назначена, я временно заменил ее на else
заблокировать value=""
и убрал бросок и сохранил остальное.
Спасибо
3 ответа
Как вы сказали, проблема заключается в том, что вы не можете использовать метод, который выдает здесь исключение.
Синтаксически это будет работать со статическим блоком инициализации:
public static URI uri;
static {
try {
uri = new URI("http://www.example.com/image.jpg");
} catch(Exception e) {
//Eventually throw new IllegalArgumentException();
}
}
Но я настоятельно советую не делать этого. ИМХО, статические блоки инициализации - подсказка, что с дизайном что-то не так.
Я думаю, что определение метода чище:
public String getDBConnection () {
return ChargementProjetProperties.getInstance().getValueByKey("conn");
}
getValueByKey
Метод выдает исключение, и вы нигде его не перехватываете. Вот почему говорится, что есть необработанное исключение. Вы должны объявить DB_CONNEXION
в вашем интерфейсе, но определите его где-нибудь вниз по течению (классы, которые реализовали этот интерфейс), где вы можете обработать исключение.
static final String DB_CONNEXION
Инициализация эквивалентна статической функции конструктора, и в ней, если исключение будет сгенерировано или вызвано, тогда не будет никакого шанса обработать исключение. Лучший способ - сохранить статическую функцию конструктора без исключений или зарегистрировать UncaughtExceptionHandler.