Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему в ява нет throw Warning(), дилемные вопросы об архитектуре 
:(
    Опции темы
polosatij
Дата 1.10.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



пример:

Код

   public int foobar() throw Exception, throw "something like Warning"


Концепция Exception горовит, что данная ситуация не разрешима.. как было бы хорошо иметь throw "something like Warning", дабы не придумывать дополнительного объекта для Warning, что нужно заполнить при таком-то и таком-то случае.. 

кто, что думает по этому поводу?  smile 

Это сообщение отредактировал(а) polosatij - 1.10.2008, 23:30


--------------------
PM   Вверх
fixxer
Дата 2.10.2008, 07:14 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Потом спросишь почему нельзя на throws вешать анотацию @If ?  smile 
Знаешь поговорку про кота которому делать нечего?

Это сообщение отредактировал(а) fixxer - 2.10.2008, 07:14


--------------------
user posted image
PM MAIL ICQ   Вверх
ecologist
Дата 2.10.2008, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 2
Всего: 9



Я не очень понял идею - хотчется автоматического заполнения сообщения для Exception или что-то еще ?
PM MAIL   Вверх
Дрон
Дата 2.10.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Цитата(fixxer @  2.10.2008,  08:14 Найти цитируемый пост)
Потом спросишь почему нельзя на throws вешать анотацию @If ?  smile 
Знаешь поговорку про кота которому делать нечего?

 smile 

Но на самом деле вопрос скорее всего правильный. Это действительно ограничение известных мне языков, и я не знаю решено ли оно где-либо (в C# есть хитрая конструкция, но она немного для других целей).
Я понимаю проблему так, есть некий метод:
Код

void doSomething() throws Warning
{
    // блок A
    throw new Warning();
    // блок B
}
и есть метод, вызывающий его:
Код

void main()
{
     try
     {
         doSomething()
     }
     catch(Warning w)
     {
          // блок C: показать сообщение об ошибке;
     }
     // блок D
}

При обычной обработке исключений, выполнение по блокам идёт так: A, throw, C, D, т.е. в блок B мы вообще никогда не попадаем. Но иногда было бы полезно иметь такой порядок: A, throw, C, B, D, т.е. после обработки исключения в catch метода main хотелось бы снова вернуться в метод doSomthing и закончить работу. Т.е. хотелось бы иметь концепцию "нефатальных" исключений (по английски их зовут continuable exceptions), позволяющих продолжить работу.

Хотя в некотором роде эта проблема решается блоком finally.

PS: В C# есть такая хитрая команда как yield return, позволяющая вернуть некое значение, а при следующем вызове этого метода продолжить выполнение со середины, но там много ограничений и вообще сделано это было для обработки коллекций, а не запутывания порядка выполнения smile

Добавлено @ 11:01
Хотя может я и усложняю, а автор темы мечтает о чём-то совсем простом  smile 

Это сообщение отредактировал(а) Дрон - 2.10.2008, 11:08


--------------------
Да. Именно так.
PM   Вверх
polosatij
Дата 2.10.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(fixxer @  2.10.2008,  07:14 Найти цитируемый пост)
Потом спросишь почему нельзя на throws вешать анотацию @If ? 


сам догадался?  smile 

Цитата(fixxer @  2.10.2008,  07:14 Найти цитируемый пост)
Знаешь поговорку про кота которому делать нечего?


неа, как мне её знать, если я вкалываю по 16 часов в сутки? smile

Дрон, 

в принципе, на мысль можно и посмотреть с того бока, что ты преподал..

я имел ввиду следующее:

Код


    public void foo() throws Warning {
        throw Warning();
    }

    // тогда

    public void bar() {
        try {
            foo();
        } catch (Warning w) {
            // обрабатываем warning и 
        }
        // работаем дальше..
    }


например: делаем запрос на сервер, что-то типа "select * from blabla;".
этот запрос возвращает только 100 данных (из, например 102) и кидает Warning => внимание, я прислал тебе только 100 сообщений по регламенту нашего сервера..

или.. если это покажется не очень удачным примером..

пример 2: делаем запрос на сервер, отсылаем какуй-либо запрос на тему add instance;
с сервера приходит warning: "запрос был осуществлён и имеет смысл, но в вашем запросе пустое поле А"..
это значит, запрос так и так имеет смысл, но следует предупреждение с сервера  smile 

второй случай имеет место быть в ситуации, когда ты даёшь форму пользователю (я имею сейчас ввиду администрацию какого-либо продукта) и 1. ему не известен А 2. ему известен А  smile 

если же кидать Exception  в этом случае и вылавливать его по типу, то в данном случае идёт нарушение семантики и ведёт к заблужению, например, програмера другого, что копается в том же самом проекте.. можно, конечно, обо всём договориться, но это уже другая история  smile 


Это сообщение отредактировал(а) polosatij - 2.10.2008, 11:38


--------------------
PM   Вверх
LSD
Дата 2.10.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(polosatij @  2.10.2008,  00:30 Найти цитируемый пост)
Концепция Exception горовит, что данная ситуация не разрешима.. как было бы хорошо иметь throw "something like Warning", дабы не придумывать дополнительного объекта для Warning, что нужно заполнить при таком-то и таком-то случае.. 

Концепция Exception говорит, что ситуация не разрешима на данном уровне и проблему надо передать на более высокий уровень.

А вот твоя концепция не понятна. Как и что в этом случае должно происходить?


Дрон, то что ты говорил, реализуется ExceptionHandler-ми. Если реализовывать это на уровне языка возникает куча вопросов как должен выглядеть стек вызова в таком случае, что делать с Exception-ами (кто их должен обрабатывать) и т.д.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Дрон
Дата 2.10.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Цитата(LSD @  2.10.2008,  12:48 Найти цитируемый пост)
А вот твоя концепция не понятна. Как и что в этом случае должно происходить?

С вашего позволения, продолжу телепатить smile

Видимо автор хочет возвращать помимо результата функции N ещё и предупреждение X: "ау, функция отработала не так как вы можете ожидать". Я обычно в таких случаях возвращаю объект обёртку, содержащий два поля: результат N, и его статуст X. Это работает, но ведь в своё время исключения и были сделаны для того, чтобы функции не возвращали статус ошибки вперемешку с данными и не требовалось постоянно проверять что-нибудь вроде:
if (GetLastError() != OK) ... Но всё же не понятно, как (и зачем) это красиво встроить в язык.

Цитата(LSD @  2.10.2008,  12:48 Найти цитируемый пост)
Дрон, то что ты говорил, реализуется ExceptionHandler-ми. Если реализовывать это на уровне языка возникает куча вопросов как должен выглядеть стек вызова в таком случае, что делать с Exception-ами (кто их должен обрабатывать) и т.д. 

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

Это сообщение отредактировал(а) Дрон - 2.10.2008, 12:33


--------------------
Да. Именно так.
PM   Вверх
polosatij
Дата 2.10.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8




Цитата(Дрон @  2.10.2008,  12:29 Найти цитируемый пост)
Но всё же не понятно, как (и зачем) это красиво встроить в язык.


угу..  smile 


Цитата(Дрон @  2.10.2008,  12:29 Найти цитируемый пост)
всегда можно сделать специфичный обработчик под свои нужды, который лучше будет решать поставленную задачу.


не всегда.. или точнее, слишком много бесполезной и не нужной работы какой-то..

представь себе ситуацию.. у тебя около 300 методов в EJB и каждый их них возвращает определённый тип ( к сожалению не один и тот же )..
так вот.. заварачиваем <Warning> и <неизвесный Тип> в один объект => <неизвестный тип> постоянно разный ява объект. это значит в Wapper-e ожидаем Object.

это значит когда-то придётся делать cast на нужный на тип ява. бред полный => очень много работы какой-то бесполезной.

и ещё нужно на каждый метод писать заполнение Warning-а ( к сожалению у меня эта трабла не решается автоматом ), а потом в другом месте делать cast на объект данного типа и не забыть проверить (!), если ли там Warning  smile 

как было бы классно в одном месте бросать warning в другом получать его и обрадатывать  smile 



--------------------
PM   Вверх
fixxer
Дата 2.10.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(polosatij @ 2.10.2008,  13:13)
представь себе ситуацию.. у тебя около 300 методов в EJB

Жесть. Ты эта, заканчивай с 16-ти часовым рабочим днем. На здоровье отражается smile


--------------------
user posted image
PM MAIL ICQ   Вверх
LSD
Дата 2.10.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Дрон @  2.10.2008,  13:29 Найти цитируемый пост)
Видимо автор хочет возвращать помимо результата функции N ещё и предупреждение X: "ау, функция отработала не так как вы можете ожидать". Я обычно в таких случаях возвращаю объект обёртку, содержащий два поля: результат N, и его статуст X. Это работает, но ведь в своё время исключения и были сделаны для того, чтобы функции не возвращали статус ошибки вперемешку с данными и не требовалось постоянно проверять что-нибудь вроде:
if (GetLastError() != OK) ... Но всё же не понятно, как (и зачем) это красиво встроить в язык.

Тут вопрос в том, как обрабатывать подобные Warning:
Это обязательно как с Exception, или по желанию? 
Сколько этот Warning должен жить (не забываем, что это объект и под него выделена память)? Если на один уровень в верх по иерархии вызовов, то крайне неудобно. Если до бесконечности пока Warning не будет обработан, то в долгоживущих тредах (например в том же пуле), Warning будут копиться. Указать при выбрасывании Warning сколько он должен жить, тоже не получится, мы же не всегда знаем откуда и как будут идти вызовы.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
AntonSaburov
Дата 2.10.2008, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



На мой взгляд идея надумана - ну возвращайте не один Exception а два, три и т.д.
Или надо еще какой-то "мягкий" вариант ? Ну тогда тоже ерунда - он в данном случае ничем не отличается от обычного Exception.
Если не хочется ловить, а генерить Exception хочется - ну делайте его Runtime.

Вообщем тема какая-то странная - автор толком объяснить не может, что он хочет. И смысл тогда обсуждать ?
PM MAIL WWW ICQ   Вверх
Дрон
Дата 2.10.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



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

И не сочти за наезд на Java (мой пыл как-то поостыл smile ), но если что-то подобное и станут делать, то уж точно не в Java. Я не говорю, что Microsoft -- это паровоз современных языков, но в то же время Sun совсем не спешит вносить серьёзные изменения в Java, уж очень они консервативны.


--------------------
Да. Именно так.
PM   Вверх
polosatij
Дата 2.10.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(AntonSaburov @  2.10.2008,  15:07 Найти цитируемый пост)
На мой взгляд идея надумана - ну возвращайте не один Exception а два, три и т.д.
Или надо еще какой-то "мягкий" вариант ? Ну тогда тоже ерунда - он в данном случае ничем не отличается от обычного Exception.


речь идёт не о Exception, а о Warning.. они разные по семантике.. 


Цитата(AntonSaburov @  2.10.2008,  15:07 Найти цитируемый пост)
Вообщем тема какая-то странная - автор толком объяснить не может, что он хочет. И смысл тогда обсуждать ? 


ситуация описана в пятом топике..  smile  smile 



--------------------
PM   Вверх
LSD
Дата 2.10.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Дрон @  2.10.2008,  16:11 Найти цитируемый пост)
Я не говорю, что Microsoft -- это паровоз современных языков, но в то же время Sun совсем не спешит вносить серьёзные изменения в Java, уж очень они консервативны. 

Да есть такой момент. Единственное серьёзное нововведение на уровне JRE - аннотации, ну и плюс ещё парочка на уровне компилятора.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
polosatij
Дата 2.10.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(LSD @  2.10.2008,  15:01 Найти цитируемый пост)
Это обязательно как с Exception, или по желанию? 


это обязательно..  smile 

warning сразу умирает также, как и Exception находящийся в блоке catch (Exception pEx) {}

 smile 


--------------------
PM   Вверх
ivg
Дата 2.10.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



polosatij, то что вы хотите, если я правильно понимаю, вполне может быть реализовано по аналогии с ExceptionHandler'ами, о которых уже упомянул LSD.
Может выглядеть как то так:
Код

import static warn.Warnings.*;
public class SomeClass {
    public static void main(String[] args) {
        setHandler(new WarningHandler() {
            public void handle(Warning warn) {
                warn.printStackTrace(System.out);                
            }
        });
        try {
            doSomething();
        } finally {
            removeHandler();
        }
    }

    public static void doSomething() {
        System.out.println("блок A");
        warn(new Warning("test2"));
        System.out.println("блок B");
    }
}

Код

public class Warnings {
    
    private static ThreadLocal<Warnings> local = new ThreadLocal<Warnings>();

    private Stack<WarningHandler> handlers;

    private Warnings() {
        this.handlers = new Stack<WarningHandler>();
    }

    private static Warnings instance() {
        Warnings ws = local.get();
        if (ws == null) {
            ws = new Warnings();
            local.set(ws);
        }
        return ws;
    }
    
    public static void setHandler(WarningHandler handler) {
        instance().handlers.push(handler);
    }
    
    public static void removeHandler() {
        instance().handlers.pop();
    }
    
    public static void warn(Warning warn) {
        WarningHandler wh = instance().handlers.peek();
        if (wh != null) {
            wh.handle(warn);
        }
    }
}

Код

public interface WarningHandler {

    public void handle(Warning warn);
}

PM MAIL   Вверх
polosatij
Дата 2.10.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



ivg, большое спасибо тебе, что ты не поленился написать код  smile 

однако твоё решение ничем не отличается от простой инстанции Warning, и последняя даже выходит лучше, если речь идёт о распределённых контейнерах и кластерах.. + статик сюда не катит..

к сожалению, при таком подходе нужно затрачивать слишком много сил, для того, чтоб "подстроить" всю систему на то, чтоб в неё ещё приходили warnings, чем я сегодня и занимаюсь.. думаю, это убьёт у меня ещё завтра..  smile 



--------------------
PM   Вверх
ecologist
Дата 3.10.2008, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 2
Всего: 9



Цитата(polosatij @  2.10.2008,  11:33 Найти цитируемый пост)
пример 2: делаем запрос на сервер, отсылаем какуй-либо запрос на тему add instance;
с сервера приходит warning: "запрос был осуществлён и имеет смысл, но в вашем запросе пустое поле А"..
это значит, запрос так и так имеет смысл, но следует предупреждение с сервера 

В таком контексте на мой взгляд это совершенно не требует понятия Warning. В конце концов такие вещи решаются простым выставлением какого-либо кода, который всегда можно проверить. Излишнее усложнение и утяжеление языка не идет ему на пользу.
Если посмотреть исходники того же MFC из Visual C++ - это читать уже крайне тяжело. Код должен быть в первую очередь понятен и не перегружен излишними конструкциями. 
Иногда вижу последствия использования Generic в Java и не всегда это хорошо читаемо и понятно.

P.S. Я цикл do .. while использовал последний раз больше года назад, а то и больше.
PM MAIL   Вверх
polosatij
Дата 3.10.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(ecologist @  3.10.2008,  09:22 Найти цитируемый пост)
В таком контексте на мой взгляд это совершенно не требует понятия Warning. В конце концов такие вещи решаются простым выставлением какого-либо кода, который всегда можно проверить. 


к сожалению ты ошибаешься.. представь себе ситуацию:

server <-> логика <-> ejb <-> backing bean <-> jsf

теперь, по сути вещей, в ejb есть какая нибудь метода:

public ArrayList < FooBar > doSomething(тут 3-7 параметров) throws BarException, FooException {...}

по сути дела, ты передашь лист с FooBar в backing bean..

а куда же тут спрятать Warning? оборачивать всё в какой-нибудь Wrapper? smile => слишком много тупой работы..



--------------------
PM   Вверх
Dims
Дата 4.10.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 4
Всего: 11



Можно просто сделать, чтобы функция ВСЕГДА кидала эксепшн, то есть, её штатным режимом было бы возвращение результата через эксепшн. Тогда можно будет возвращать разные типы в зависимости от варнинга, причём если вызывающиего модуля не интересует варнинг, он может не смотреть подтип.

Добавлено через 19 секунд
P.S. Кстати, а где есть Warning?
PM MAIL   Вверх
polosatij
  Дата 8.10.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(Dims @  4.10.2008,  23:54 Найти цитируемый пост)
Можно просто сделать, чтобы функция ВСЕГДА кидала эксепшн, то есть, её штатным режимом было бы возвращение результата через эксепшн. Тогда можно будет возвращать разные типы в зависимости от варнинга, причём если вызывающиего модуля не интересует варнинг, он может не смотреть подтип.


так нельзя сделать.. это чистое нарушение семантики..

------------

в общем, я сделал так:

Код

    ESIResponseResult < Object > modifyNOF(final String pNOF, ...) throws ClientAPIException, ...; // где ESIResponseResult < T >
    ESIResponseResult < ArrayList < FooBar > > modifyNOF(final String pNOF, ...) throws ClientAPIException, ...; // где ESIResponseResult < T >


Aмерику я не открыл и посему продисел 4е дня в обработке warning-ов и возвращающих типов  smile 


Цитата(Dims @  4.10.2008,  23:54 Найти цитируемый пост)
P.S. Кстати, а где есть Warning? 


не наю.. не видел.. нигде не пробегал?  smile 

Это сообщение отредактировал(а) polosatij - 8.10.2008, 21:06


--------------------
PM   Вверх
LSD
Дата 9.10.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



А вы не задумывались о том, что накладные расходы на Exception намного выше, чем на простой вызов метода?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Dims
Дата 9.10.2008, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 4
Всего: 11



Цитата(polosatij @  8.10.2008,  21:02 Найти цитируемый пост)

так нельзя сделать.. это чистое нарушение семантики..

Почему это? Exception -- это дополнительный канал возврата информации из метода. Разработчики языка решили разбить каналы возврата информации на две группы: основной и дополнительные. Группы всего две. 

А Вы, фактически, хотите сделать, чтобы их было три. Поскольку больше групп сделать нельзя, я и предложил устранить одну из групп, перейдя к одноранговой системе, управляемой только типами.

PM MAIL   Вверх
polosatij
Дата 10.10.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(Dims @  9.10.2008,  17:01 Найти цитируемый пост)
Почему это?


потому как,

1). читай выше, что сказал LSD
2). Exception - это исключение, кот. говорит, сорри, я ничего сделать на данном уровне не могу, а Warning - это вообще не исключение, оно вообще сюда никаким макаром не катит.. ты в борщ хочешь кинуть яблоки => съесть можно, но уже что-то не то..


--------------------
PM   Вверх
sith
Дата 13.10.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



прочитав две страницы этой темы прихожу к мнению что все ее участники говорят об одном и том же но с разных филосовских вершин... и не более...

автор приводил пример...

Код
  
 public void foo() throws Warning {
        throw Warning();
    }

    // тогда

    public void bar() {
        try {
            foo();
        } catch (Warning w) {
            // обрабатываем warning и 
        }
        // работаем дальше..
    }



но скажите мне чем это отличаеться от эксепшенов...
... автор приводил пример...
Код

пример 2: делаем запрос на сервер, отсылаем какуй-либо запрос на тему add instance;
с сервера приходит warning: "запрос был осуществлён и имеет смысл, но в вашем запросе пустое поле А"..
это значит, запрос так и так имеет смысл, но следует предупреждение с сервера   


ну если инстанс добавился ... то что миняет в логике программы отсудствие поля А... если это поля критично то варнинг не пойдет а нужно реджектить запрос и все делать заново... если А серверу не важно зачем бросать какойто варнинг ... 

... плюс данный скорее всего крик души вылез из того что имееться огромный код... написанный волшебными людьми из страны Оз... который нужно по шурику заставить работать... но мне кажеться создатели языка не должны следовать подобным причинам что бы добавлять разные фичи в язык... тут уж скорее всего нужно больше заниматься рефакторингом и познавать его тонкости и ньюансы... 




Это сообщение отредактировал(а) sith - 13.10.2008, 17:44


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
LSD
Дата 14.10.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(sith @  13.10.2008,  18:44 Найти цитируемый пост)
но скажите мне чем это отличаеться от эксепшенов...

Вообще-то Дрон, уже здесь уже объяснил чем это отличается от Exception.


Цитата(sith @  13.10.2008,  18:44 Найти цитируемый пост)
ну если инстанс добавился ... то что миняет в логике программы отсудствие поля А... если это поля критично то варнинг не пойдет а нужно реджектить запрос и все делать заново... если А серверу не важно зачем бросать какойто варнинг ... 

И этот вопрос тоже уже обсуждался.


Почитай всю тему, а не только первый пост.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0752 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.