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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маленький тест, :) 
:(
    Опции темы
sol78
Дата 24.2.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А обьяснение будет?
PM MAIL   Вверх
Kangaroo
Дата 24.2.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Цитата(sol78 @  24.2.2008,  21:24 Найти цитируемый пост)
А обьяснение будет? 

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

Как время появится обязательно продолжим!!


--------------------
Lost....
PM MAIL MSN   Вверх
LSD
Дата 17.4.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Так все же, что там с sneakyThrow().


--------------------
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   Вверх
Kangaroo
Дата 17.4.2008, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Цитата(LSD @  17.4.2008,  19:54 Найти цитируемый пост)
Так все же, что там с sneakyThrow(). 

А я думал зубры эту тему не читают  smile 

Постараюсь сегодня-завтра порешать и выложить.

ЗЫ

А вообще надо продолжить. Будем искать время и силы!


--------------------
Lost....
PM MAIL MSN   Вверх
Kangaroo
Дата 17.4.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Итак.. сначала вспомним:

Код

public static void sneakyThrow(Throwable t) {
    Thread.currentThread().stop(t); // Deprecated!!
}

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

Необходимо написать  метод с эквивалентной функциональность (двумя способами). Один способ будет работать только в Тайгере и выше.


Думаем...

ЗЫ
Я пока ничего не смог придумать  smile Не факт что вообще смогу  smile 
Завтра выложу решения.


--------------------
Lost....
PM MAIL MSN   Вверх
v2v
Дата 18.4.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



я наверное не понял задания ... 
Цитата(Kangaroo @  17.4.2008,  22:01 Найти цитируемый пост)

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

smile 

я делаю так и исключений нету
Код

    public static void sneakyThrow(Throwable t) {
        try{
            Thread.currentThread().stop(t); 
        } catch(Throwable e) {}
    }


аналогично работает метод: 
Код

    public static void callcall(){
        callcall();        
    }


Это сообщение отредактировал(а) v2v - 18.4.2008, 09:09


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


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Цитата(v2v @  18.4.2008,  09:01 Найти цитируемый пост)
я делаю так и исключений нету

Не понял к чему такие примеры smile 

Смысл метода в том, что ты можешь написать, например, sneakyThrow(new FileNotFoundException()) и метод, из которого это вызывается, совсем не знает про этот икспешн.
Вот нужно такие же два метода накатать.



--------------------
Lost....
PM MAIL MSN   Вверх
v2v
Дата 18.4.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



вот теперь понял smile


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


Вертилятор
***


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

Репутация: 20
Всего: 54



Kangaroo, обёртка в Error или RuntimeException считается?

Вот один способ:
Код
    public static class Thrower {
        
        public static Throwable exception;
        
        public Thrower() throws Throwable {
            throw exception;
        }
        
    }

    public static void sneakyThrow(Throwable exception) {
        try {
            Thrower.exception = exception;
            Thrower.class.newInstance();
        }
        catch (InstantiationException thrown) {
            throw new Error(thrown);
        }
        catch (IllegalAccessException thrown) {
            throw new Error(thrown);
        }
    }

Class.newInstance(), как выяснилось, не оборачивает исключение в InstantiationException.

А вот способ для тигры, хотя это больше смахивает на баг:
Код
    public static class Thrower<T extends Throwable> {
        
        public Thrower() {
        }
        
        @SuppressWarnings(
            "unchecked"
        )
        public void sneakyThrow(Throwable exception) throws T {
            // Здесь по всем законам физики и лирики должно случиться порождение ClassCastException, 
            // но этого не происходит.
            throw (T) exception;
        }
        
    }
    
    public static void sneakyThrow(Throwable exception) {
        new Thrower<Error>().sneakyThrow(exception);
    }


Это сообщение отредактировал(а) w1nd - 18.4.2008, 11:55


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


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Цитата(w1nd @  18.4.2008,  11:34 Найти цитируемый пост)
Kangaroo, обёртка в Error или RuntimeException считается?

не-а  smile

Добавлено через 53 секунды
ЗЫ

Я ужо сдался и посмотрел ответы  smile 


--------------------
Lost....
PM MAIL MSN   Вверх
w1nd
Дата 18.4.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 20
Всего: 54



Кстати, способ с методом Thread.stop() - это совсем уж непотребство, ибо действует более разрушительно, чем выброс исключения.


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


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Цитата(w1nd @  18.4.2008,  11:34 Найти цитируемый пост)
Вот один способ:

Цитата(w1nd @  18.4.2008,  11:34 Найти цитируемый пост)
А вот способ для тигры, хотя это больше смахивает на баг:


И как до такого можна додуматься...  smile  smile  smile 


w1nd, +1 Два правильных ответа  smile

Добавлено через 47 секунд
Цитата(w1nd @  18.4.2008,  11:57 Найти цитируемый пост)
Кстати, способ с методом Thread.stop() - это совсем уж непотребство, ибо действует более разрушительно, чем выброс исключения

Это ж просто для примера  smile

Добавлено через 3 минуты и 56 секунд
Цитата(w1nd @  18.4.2008,  11:34 Найти цитируемый пост)
// Здесь по всем законам физики и лирики должно случиться порождение ClassCastException, 
            // но этого не происходит.
            throw (T) exception;

А чего тут должен быть класскаст, если дженерики существуют только при компиляции?


--------------------
Lost....
PM MAIL MSN   Вверх
w1nd
Дата 18.4.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 20
Всего: 54



Цитата(Kangaroo @  18.4.2008,  12:10 Найти цитируемый пост)
А чего тут должен быть класскаст, если дженерики существуют только при компиляции?

Не совсем так. Параметры действительно существуют только во время компиляции, но если они доопределены (extends), то на байт код это оказывает влияние. Вот такой исходник
Код
public class Parametrized<T extends Number> {

    @SuppressWarnings("unchecked") public T cast(Object o) {
        return (T) o;
    }
    
}


... после компиляции породит вот такой код:
Код
public class Parametrized {

    public Parametrized() {
    }

    public Number cast(Object o) {
        return (Number)o;
    }

}


Но я не в первый раз столкнулся с тем, что приведения не происходит, несмотря на общее правило, поэтому попробовал generics smile 


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


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Так там же происходить каст от меньшего к большему:
Код

public void sneakyThrow(Throwable exception) throws T {
            // Здесь по всем законам физики и лирики должно случиться порождение ClassCastException, 
            // но этого не происходит.
            throw (T) exception;
        }

после компиляции вот это:
Код

public void sneakyThrow(Throwable exception) throws Throwable {
            // Здесь по всем законам физики и лирики должно случиться порождение ClassCastException, 
            // но этого не происходит.
            throw (Throwable) exception;
        }

А любой иксепшн, которые мы захотим кинуть - Throwable


--------------------
Lost....
PM MAIL MSN   Вверх
w1nd
Дата 18.4.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 20
Всего: 54



Цитата(Kangaroo @  18.4.2008,  12:45 Найти цитируемый пост)
А любой иксепшн, которые мы захотим кинуть - Throwable

По-моему, дело не в том, что к чему приводится. Просто при создании параметризованного объекта не может быть никаких наигрышей в коде. Вот пример, в котором ClassCastException случится:
Код
public class Thrower1<T extends Throwable> {

    @SuppressWarnings("unchecked") public T sneakyThrow1(Throwable exception) throws T {
        throw (T) exception;
    }

    public static void main(String[] args) {
        new Thrower2<Error>().sneakyThrow2(
            new Exception("Oops")
        );
    }
    
}

class Thrower2<T extends Error> extends Thrower1<T> {
    
    @SuppressWarnings("unchecked") public T sneakyThrow2(Throwable exception) throws T {
        throw (T) exception;
    }
    
}




Это сообщение отредактировал(а) w1nd - 18.4.2008, 12:58


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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