Выдает объявления и методы интерфейса - PullRequest
1 голос
/ 28 мая 2010

Вот код из приложения FTP, над которым я работаю. Первый метод исходит из интерфейса, который запускается классом, который отслеживает вывод сервера.

@Override
public void responseReceived(FTPServerResponse event) {
    if (event.getFtpResponseCode() == 227) {
        try {
            setupPassiveConnection(event.getFullResponseString());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Вызывает второй setupPassiveConnection(), который выбрасывает некоторые исключения.

public void setupPassiveConnection(String serverReplyString) throws UnknownHostException, IOException {
    String passiveInfo[] = serverReplyString.substring(
            serverReplyString.indexOf("(") + 1,
            serverReplyString.indexOf(")")).split(",");

    int port = (Integer.parseInt(passiveInfo[4]) * 256)
            + (Integer.parseInt(passiveInfo[5]));

    String ip = passiveInfo[0] + "." + passiveInfo[1] + "."
            + passiveInfo[2] + "." + passiveInfo[3];

    passiveModeSocket = new Socket(ip, port);

    if( passiveModeSocket != null )
        isPassiveMode();
}

Поскольку исключения не могут быть переброшены через первый метод, что было бы правильным способом переписать это?

Ответы [ 3 ]

3 голосов
/ 28 мая 2010

Вы имеете в виду, что первый блок кода находится внутри класса, который реализует интерфейс, который задает responseReceived без условия throws, поэтому вы не можете перебросить?

В этом случае ваш класс должен сохранить результат и предоставить API, через который клиенты могут получить ответ, то есть метод getResponseCode().

Посмотрите на классы java.util.concurrent ExecutorService и Future.

1 голос
/ 28 мая 2010

Если вы не можете обрабатывать их немедленно, например, отображать в пользовательском интерфейсе разумное сообщение об ошибке, уведомляющее, что конечный пользователь должен использовать другой подход, или альтернативный путь в коде, тогда вам нужно оберните и перебросьте их как RuntimeException, когда это означает исправляемую ошибку разработчика, или как Error, когда это означает неисправимую ошибку, например IOError . В любом случае, это должно быть задокументировано правильно и четко.

1 голос
/ 28 мая 2010

Если вы не можете изменить интерфейс (или не хотите), ваше исключение должно быть RuntimeException (или какой-то другой подкласс этого). Вы можете указать UnknownHostException в вашем RuntimeException как причину (используя конструктор, который принимает Throwable).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...