Я не совсем уверен, как вы структурировали материал "перезапустите некоторые другие классы и потоки". Если это путаница вызовов методов, вы можете поместить представленный вами код в абстрактный класс и добавить абстрактный метод
abstract class AbstractTimeout {
... your code here, but add a call to afterConnection() ...
protected abstract void afterConnection();
}
Подкласс будет реализовывать это, устанавливая некоторые поля для всех объектов классов и вызовов в конструкторе, а затем реализуя путаницу вызовов в
protected void afterConnection() {
class1.goDoThis();
object2.goDoThat();
someRunnable.run();
// ... etc...
}
Это классика inheritance
. Кстати, вы должны рассмотреть, какие исключения могут быть выброшены, а какие объявить. Для простоты я проигнорировал эту проблему.
В качестве альтернативы, если материал «перезапустить некоторые другие классы и потоки» уже находится в чем-то довольно простом и хорошо организованном, например, Runnable
, вы можете сделать так, чтобы ваш класс принял Runnable
вместе с URLConnection
как аргумент и запустите () Runnable (или запустите его в новом потоке) после завершения соединения. Это классическая композиция . например,
public void doTimeout(URL url, Runnable afterConnection) {
// your connection stuff from above
afterConnection.run();
}
ПРИМЕЧАНИЕ: я не помещал afterConnection.run () в поток, потому что я думаю, что doTimeout уже должен быть в его собственном потоке. YMMV.
ПРИМЕЧАНИЕ 2. Мое второе решение аналогично концепции @Miserable Variable afterConnect (). Я использовал Runnable, он использовал более гибкий интерфейс.