Если выдается исключение, из метода не возвращается нормальное значение. Обычно компилятор может обнаружить это, поэтому он даже не приставает к вам с предупреждениями / ошибками в стиле «вернуть требуемый». Иногда, когда он не может этого сделать, вам нужно дать оператор возврата "alibi", который фактически никогда не будет выполнен.
Переопределение вашего метода следующим образом
public Connection getConn() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
if(System.getenv("MY_ENVIRONMENT") == "development") {
String hostname = "localhost";
String username = "root";
String password = "root";
}
conn = DriverManager.getConnection("jdbc:mysql:///mydb", username, password);
} catch(Exception e) {
// handle the exception in a meaningful way - do not just rethrow it!
}
return conn;
}
удовлетворит Eclipse: -)
Обновление: Как уже отмечали другие, повторное создание исключения в блоке перехвата, как вы это сделали, не является хорошей идеей. Единственная ситуация, когда это достойное решение, - это если вам нужно конвертировать между разными типами исключений. Например. вызываемый метод выбрасывает тип исключения, который вы не можете или не хотите распространять вверх (например, потому что он принадлежит проприетарной библиотеке или фреймворку и вы хотите изолировать от него остальную часть вашего кода).
Даже тогда, правильный способ перебросить исключение - это передать исходное исключение в конструктор нового (стандартные исключения Java и большинство специфичных для фреймворка исключений позволяют это). Таким образом, трассировка стека и любая другая информация в исходном исключении сохраняется. Также хорошей идеей будет записать ошибку перед повторной обработкой. Э.Г.
public void doSomething() throws MyException {
try {
// code which may throw HibernateException
} catch (HibernateException e) {
logger.log("Caught HibernateException", e);
throw new MyException("Caught HibernateException", e);
}
}