powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как узнать был ли Exception
11 сообщений из 11, страница 1 из 1
как узнать был ли Exception
    #38571557
OldBoyOdeSu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Упрощённо задача выглядит так: в подпрограмме надо узнать не вызвана ли она из блока Exception
Есть некий класс
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
package mytest.pkg;

import java.util.Map;

public class OuterClass {
    int code;
    public OuterClass() {
    }
    public void setCode(int code) {
        //TODO kak uznat bil li exception pri vizove?
        //Map<Thread, StackTraceElement[]> m = Thread.getAllStackTraces(); 
        
        this.code = code;
    }
    public int getCode() {
        return code;
    }
}



Есть главный класс
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
package mytest.pkg;

public class clsMain {
    public clsMain() {
    }

    public static void main(String[] args) {
        clsMain clsMain = new clsMain();
        OuterClass ls = new OuterClass();
        try{
            int i = 5;
            ls.setCode(0);
            i = i / ls.getCode();
            ls.setCode(-1);
        }catch(Exception ex){
            System.out.println(ex.toString());
            ls.setCode(-1);
        }
    }
}



Есть ли возможность в OuterClass в подпрограмме setCode узнать, вызван он из Exception или нет (например установив ls.setCode(1); исключения не будет)

Есть идеи у кого-нибудь?
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571569
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не "блок Exception", а "блок catch".
Задача сводиться к тому как можно ли узнать из одной строки был вызыван метод, или из другой. Да, можно, прочитав номер строки из стэка, если класс скомпилирован для отладки.
Одно не понятно - а нафига.
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571583
OldBoyOdeSu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Не, по номеру строки не пойдёт. Есть очень много классов в которых используется OuterClass
Во всех них такой код (упрощенно)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        OuterClass ls = new OuterClass();
        try{
            ls.setCode(0);  //not Error
        }catch(MyException ex){         //LOGICAL EXCEPTION
            ls.setCode(-1); //Error
         }catch(OtherException ex){     //LOGICAL EXCEPTION
             ls.setCode(-1); //Error     
        }catch(SQLException ex){
              ls.setCode(-1); //Error                
        }catch(Exception ex){
            ls.setCode(-1); //Error
        }



OuterClass в setCode смотрит, если это ошибка Code(-1) то один алгоритм .... если это не ошибка Code(0), то другой.
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571585
OldBoyOdeSu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OldBoyOdeSu,

так вот теперь ввели понятие логическая ошибка и это должно быть приравнено к Code(0); //not Error

вот не хотелось бы всё переделывать, а в setCode определить как - то этот момент, если возможно
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571600
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OldBoyOdeSuтак вот теперь ввели понятие логическая ошибка и это должно быть приравнено к Code(0); //not Error

вот не хотелось бы всё переделывать, а в setCode определить как - то этот момент, если возможно
Этот кабздец надо сесть и нормально отрефакторить. Например так:

Код: java
1.
2.
3.
catch(MyException|OtherException|SQLException ex){    
  setCode(ex instaceof LogicalException ? 0 : -1);
}


Боязнь рефакторинга не оправдывает кривизу решений.
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571608
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну можно, конечно изобрести кучу обходных решений через посткомпиляций или инструментацию, чтобы хранить ссылку на последнее исключение в стэке. Но зачем это?
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571620
OldBoyOdeSu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
не, не, по кривому нельзя, проект серьёзный...

"надо сесть и нормально отрефакторить"

да, вот походу к тому всё и идёт, просто думал может есть средство какое волшебное, про которое я не знаю, Java это не мой конёк. Спасибо.
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571630
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OldBoyOdeSuда, вот походу к тому всё и идёт, просто думал может есть средство какое волшебное, про которое я не знаю, Java это не мой конёк. Спасибо.
Есть куча волшебных средств, но они здесь не нужны. Зачем усложнять решение простой задачи?
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571655
OldBoyOdeSu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
"Зачем усложнять решение простой задачи?"

Я определил самое узкое место, это setCode, если бы в нём можно было гарантированно и стандартно определить, вызван он из MyException|OtherException или других Exception, либо же ни каких Exception не было, то эта бы и была самая простая задача.
А сейчас необходимо много классов перелопачивать, а ещё через полгода решат что ошибки эти всё таки не логические (надо это предусмотреть кстати будет...)

Т.е. идея понятна, стандартно ни как не определить.
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571666
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замените setCode на setException - работы на несколько часов на крупном проекте.
...
Рейтинг: 0 / 0
как узнать был ли Exception
    #38571783
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЗамените setCode на setException - работы на несколько часов на крупном проекте.
+1
Замена текста в любом текстовом редакторе или IDE
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / как узнать был ли Exception
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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