Подсмотрел на http://java-course.ru/articles/exceptions/
описание задачи и решил заменить .
Блок исходный
public TestedThread(Thread.UncaughtExceptionHandler handler) {
setUncaughtExceptionHandler(handler);
start();
}
Блок с моими изменениями
public TestedThread(Thread.UncaughtExceptionHandler handler) {
super();
Thread.setDefaultUncaughtExceptionHandler(handler);
start();
}
Далее после решения начал рыскать и искать правильно ли это решение, в комментариях, нашел комментарий где описано,что использовать setDefaultUncaughtExceptionHandler(handler) в конструкторе не верно и понял, что было его правильно применить в main до старта threadA и threadB. Так же ещё раз посмотрел пример задачи ,которую прикреплял в начале. После этого понял,что они используют Thread.setDefaultUncaughtExceptionHandler() тоже в main.
Посмотрел в комментариях,что код будет работать с setDefaultUncaughtExceptionHandler(handler) если добавить в конструктор,но компилятор не пропустит такое решение.
После всего этого созрел вопрос,какая разница между этими двумя блоками.
Если в конструкторе указать
public TestedThread(Thread.UncaughtExceptionHandler handler) {
setDefaultUncaughtExceptionHandler(handler);
start();
}
Или
public TestedThread(Thread.UncaughtExceptionHandler handler) {
super();
Thread.setDefaultUncaughtExceptionHandler(handler);
start();
}
Как понимаю валидатор пропустил из за вызова Thread.
Также я добавил вызов super() но думаю и без него бы работало бы.
Как я понимаю в первом случае метод вызовется для какой-то конкретной нити. А с добавлением Thread. метод вызовется для всех создаваемых нитей.
Дмитрий Ковтунов
20 уровень
Не пойму правильно ли решил задачу
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
6 декабря 2020, 13:35
Есть два разных метода - статический setDefaultUncaughtExceptionHandler и нестатический setUncaughtExceptionHandler.
Вроде в этой задаче дефолтный handler устанавливать не просят.
+1
Дмитрий Ковтунов
6 декабря 2020, 14:22
То есть в моем случае,запись setDefaultUncaughtExceptionHandler()
и
Thread.setDefaultUncaughtExceptionHandler() это равноценные записи?
0
Дмитрий Ковтунов
6 декабря 2020, 14:33
Просто один пользователь писал,что у него не пропускает компилятор и в коде у него было написанно без Thread. Но вывод был правильный
0
Ksenia VolkovaJava Developer в DXCMaster
6 декабря 2020, 14:46
setDefaultUncaughtExceptionHandler() и Thread.setDefaultUncaughtExceptionHandler() это вызов одного и того же статиеского метода?
Если бы не пропускал компилятор, то вывода не было бы вообще. Если не пропускал валидатор - то надо смотреть конкретный код и разбираться, что именно не так.
+1
Дмитрий Ковтунов
6 декабря 2020, 14:53
Спасибо за разъяснение.
Прочитал о вызове статических методов и понял, что это две записи вызова одного метода.
Да остается лишь гадать почему валидатор в одном случае не пропускал а в моем пропустил.
0
Серега Android Developer
13 декабря 2020, 11:24
делал так же, без "Thread.", пропустил без проблем
0