пятница, 7 сентября 2007 г.

Java Puzzle 37: Exceptionally Arcane

Что вы думаете об этой программе?
public class Arcane1 {
    public static void main(String[] args) {
        try {
            System.out.println("Hello world");
        } catch (IOException exception)
            System.out.println("I've never seen println fail");
        }
    }
}
А она не компилится! Правильно. Спецификация гласит, что не должна выполняться компиляция блока catch для проверяемого исключения типа E, если соответствующий блок try не может сгенерировать исключение этого типа или одного из его подтипов (JLS 11.2.3).

А что вы думаете о следующей программе?
public class Arcane2 {
    public static void main(String[] args) {
        try {
            // If you have nothing nice to say, say nothing
        } catch (Exception exception)
            System.out.println("This can't happen");
        }
    }
}
А вот и нет! Она компилится. Дело в том, что для базовых типов исключений (Throwable и Exception) сделано исключение, так как они могут использоваться для перехвата непроверяемых исключений.

Попытаемся создать метод, в сигнатуре которого определены проверяемые исключения, но сам он их не кидает. И попробуем его вызвать без проверки. Скомпилится?
interface Type1 {
    void f() throws CloneNotSupportedException;
}
interface Type2 {
    void f() throws InterruptedException;
}
interface Type3 extends Type1, Type2 {
}
public class Arcane3 implements Type3 {
    public void f() {
        System.out.println("Hello world");
    }
    public static void main(String[] args) {
        Type3 t3 = new Arcane3();
        t3.f();
    }
}
Множество проверяемых исключений, которые метод может сгенерировать, является пересечением множеств проверяемых исключений, которые определены во всех типах. Заметьте, не объединение, а пересечение!

Total control

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

По-видимому, автор заметки переиграл в Quake. Проценты здоровья...
Ха!

Raiffeisen

Ходил пару недель назад в банк. После того, как я закончил свои дела, я спросил операционистку: можно ли оформить кредитную карту? Мне сказали, что надо принести справку с места работы. В бухгалтерии мне сказали, что в первый раз слышат про такую справку и созвонились с представителем банка, работающим с нашей фирмой. Выяснилось, что девушка была новенькая и не знала, что я корпоративный клиент. Ну да ладно. Мне сказали, чтобы я взял паспорт и мне все там оформят.
Сегодня с утра пришел в банк. Все операционисты заняты, двое по телефону болтают. Тут парень какой-то трубку повесил и сидит, делает вид, что меня нет. Ну я двигаюсь ближе, еще ближе. Наконец, он меня заметил. Я спросил про кредитку. Он решил меня послать опять на работу. Я сказал, что я корпоративный клиент. Тогда он выдал мне анкету и сказал, что бы я валил и возвращался, когда заполню анкету и сделаю копию паспорта. Ну я и пошел. В шоке...
По пути, конечно, успокоился, обдумал все. Копию паспорта они всегда делали. Анкеты я всегда с операционистом заполнял. И только этот урод попался! Теперь придется третий раз идти...