Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Try catch / 25 сообщений из 28, страница 1 из 2
16.02.2018, 15:24
    #39603068
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
public class Main {

  public static void main(String[] args) {
    System.out.println("Hello World!");
    try {
      methodA();
    } catch (TestException e) {
      System.err.println("methodA = " + e.getMessage());
    }
    try {
      methodB();
    } catch (TestException e) {
      System.err.println("methodB = " + e.getMessage());
    }
    try {
      methodC();
    } catch (TestException e) {
      System.err.println("methodC = " + e.getMessage());
    }
    System.out.println("Hello World!");
  }

  private static void methodA() throws TestException {
    try {
      System.out.println("methodA Start");
      System.out.println(15 / 3);
      System.out.println("methodA End");
    } catch (RuntimeException re) {
      throw new TestException(re.getMessage(), re);
    }
  }

  private static void methodB() throws TestException {
    try {
      System.out.println("methodB Start");
      System.out.println(15 / 0);
      System.out.println("methodB End");
    } catch (RuntimeException re) {
      throw new TestException(re.getMessage(), re);
    }
  }

  private static void methodC() throws TestException {
    try {
      System.out.println("methodC Start");
      System.out.println(15 / 10);
      System.out.println("methodC End");
    } catch (RuntimeException re) {
      throw new TestException(re.getMessage(), re);
    }
  }

}

public class TestException extends RuntimeException {

  public TestException(String message, Throwable cause) {
    super(message, cause);
  }


}



Мне надо , что б выполнились все methodA, methodB, methodC
Вне зависимости от ошибок

Можно ли избавить от try-catch? Или хотя б уменьшить их
...
Рейтинг: 0 / 0
16.02.2018, 15:34
    #39603086
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
-=Koba=-,

finaly ?
...
Рейтинг: 0 / 0
16.02.2018, 15:34
    #39603087
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Лямды наше всё. Из методов A,B,C исключения убираете совсем. Оставляете только логику - то для чего именно метод был создан.
Делаете единственный метод с обработкой исключений, который принимает Callable, Function или другой нужный вам Single Method Interface. В результате main() сводится к:

Код: java
1.
2.
3.
4.
 
runAndCatch(Main::methodA);
runAndCatch(Main::methodB);
runAndCatch(Main::methodV);
...
Рейтинг: 0 / 0
16.02.2018, 15:37
    #39603096
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
-=Koba=-Мне надо , что б выполнились все methodA, methodB, methodC
Вне зависимости от ошибок
Странный вопрос.
Исключния для прерывания потока выполнения.
А ты требуешь обратного?
Гаси их в методах.
Иначе Г.код.
...
Рейтинг: 0 / 0
16.02.2018, 15:59
    #39603135
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
-=Koba=-,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public static void main(String[] args) throws Exception {
    System.out.println("Hello World!");
    methodRunner(() -> methodA(), () -> methodB(), () -> methodC());
    System.out.println("Hello World!");
}

public static void methodRunner(Runnable...runnables) {
    for (Runnable runnable: runnables) {
        try {
            runnable.run();
        } catch (Throwable t) {
            t.printStackTrace(System.out);
        }
    }
}
...
Рейтинг: 0 / 0
16.02.2018, 16:05
    #39603143
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Usman,
Погасить засунув в поток?)
...
Рейтинг: 0 / 0
16.02.2018, 16:15
    #39603157
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Petro123,

Все выполняется в основном потоке, просто заюзал интерфейс Runnable...
...
Рейтинг: 0 / 0
16.02.2018, 16:30
    #39603181
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
UsmanPetro123,

Все выполняется в основном потоке, просто заюзал интерфейс Runnable...не знал.
...
Рейтинг: 0 / 0
19.02.2018, 19:18
    #39604415
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Usman
Код: java
1.
2.
3.
4.
5.
        try {
            runnable.run();
        } catch (Throwable t) {
            t.printStackTrace(System.out);
        }

Не надо так, ловля Throwable - это очень неправильно. Прилетит OutOfMemoryError, и как эта конструкция его обрабатывать будет?
...
Рейтинг: 0 / 0
19.02.2018, 19:56
    #39604429
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
ЗашедшийПрилетит OutOfMemoryError, и как эта конструкция его обрабатывать будет?-=Koba=-Мне надо , что б выполнились все methodA, methodB, methodC
Вне зависимости от ошибок
...
Рейтинг: 0 / 0
24.02.2018, 22:07
    #39606835
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Я под ошибками имел ввиду
NPE, сохранение в БД итд
...
Рейтинг: 0 / 0
25.02.2018, 00:18
    #39606879
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
-=Koba=-Я под ошибками имел ввиду
NPE, сохранение в БД итдну глупая же постановка. Самому писать try и самому плевать на try.
...
Рейтинг: 0 / 0
25.02.2018, 08:43
    #39606904
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Petro123Самому писать try и самому плевать на try.Если требуется подавить исключение - совершенно нормально.
Требуется или не требуется - вопрос совершенно отдельный.
...
Рейтинг: 0 / 0
25.02.2018, 13:36
    #39606947
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Код который выполняет цепочку методов и игнорит исключения - совершенно нормален. Особенно
если речь идет о финализации какого-то процесса. Закрываем соединения с БД и закрываем файлы.
В этот момент нам пофиг что будет внутри.

Но я-бы переделал methodA, *B, *C на интерфейс не бросающий исключения.
...
Рейтинг: 0 / 0
25.02.2018, 14:01
    #39606949
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
maytonНо я-бы переделал methodA, *B, *C
и я как бы о том же.
Вот этот вопрос чисто про архитектуру:
-=Koba=-Можно ли избавить от try-catch? Или хотя б уменьшить их
Переписать код и он станет меньше.
...
Рейтинг: 0 / 0
25.02.2018, 14:23
    #39606957
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
maytonНо я-бы переделал methodA, *B, *C на интерфейс не бросающий исключения.
когнитивный шок
Код: java
1.
2.
3.
4.
5.
6.
7.
protected void process(тип1 парам1, тип2 парам2) {
  толькоЗдесь(тип1 парам1, тип2 парам2);
}
private void толькоЗдесь(тип1 парам1, тип2 парам2) {
  // увеличиваем глубину стека вызовов,
  // делая реальную работу
}

Вот зачем эта обёртка? Чтобы было?
Или чтобы читатель кода гадал о причинах столь глубокомысленного решения?

Есть более-менее стандартное API ...
Зачем обязательно прятать это API в то, что нужно "здесь и сейчас" и больше нафиг не нужно???
...
Рейтинг: 0 / 0
25.02.2018, 15:00
    #39606963
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
maytonНо я-бы
я бы не писал
Код: java
1.
throw new

, если исключение не нужно наверху.
Остальное гадание на кофейной гуще.
...
Рейтинг: 0 / 0
25.02.2018, 23:25
    #39607054
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
В Apache IOUtils есть семейство функций closeQuietly(..). После появления семерки их помаркировали как @Deprecated
и советуют использовать try-with-resources. Этот кейс очень похож на проблему с которой воюет автор. Ну.. по крайней
мере если автор закрывает ресурсы то ему стоит подумать о AutoCloseable.
...
Рейтинг: 0 / 0
26.02.2018, 16:33
    #39607377
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Суть проблемы
что идут подряд пять метдов

И в последнем идет сохранение информации, и вот если что-то свалилось, то сохранение в БД не происходит
...
Рейтинг: 0 / 0
26.02.2018, 17:13
    #39607403
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
-=Koba=-Суть проблемы
что идут подряд пять метдовубирай райзе из методов.
Неделю не можешь внятно задачу описать.
...
Рейтинг: 0 / 0
26.02.2018, 17:15
    #39607405
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
-=Koba=-вот если что-то свалилось, то сохранение в БД не происходит
Try
....
Finally
Сохранили в бд
...
Рейтинг: 0 / 0
27.02.2018, 10:43
    #39607681
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Это понятно

Method 1
Method 2
Method 3
Method 4
SaveToDB

Если через finally, что SaveToDB будет всегда, а остальные методы?
...
Рейтинг: 0 / 0
27.02.2018, 10:59
    #39607696
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
-=Koba=-Если через finally, что SaveToDB будет всегда, а остальные методы?Вы прям как маленький ...
Если методы кидают исключения и требуется специфичная обработка для каждого - будет тихий ужас из вложенных try-catch-finally.
Если специфичная обработка не требуется, то делаем обёртку, подавляющую исключения и, возможно, протоколирующую некоторое сообщение.

Запоминаем, что обработчик, делающий печать стека исключений - никуда негодная фигня и отвыкаем от этой гадости.
...
Рейтинг: 0 / 0
27.02.2018, 11:01
    #39607700
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
Я понимаю, что сейчас данное решение написано на коленях, переделаю

Просто вопрос стал как избавиться, от try - catch
Подсказали сделать, через лямбы.

Ок сделал уже давно
...
Рейтинг: 0 / 0
27.02.2018, 11:11
    #39607706
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch
-=Koba=-Method 1
Method 2
Method 3
Method 4
SaveToDBДостаточно пометить основной метод (в котором выполняется вся эта цепочка) аннотацией @Transactional и транзакция автоматически откатится при возникновении исключения.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Try catch / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]