Тонкости программирования. Неконтролируемые исключения в Java

Вычитал у Хорстманна следующую вещь - в переопределяемом методе подкласса нельзя указывать throws, если у такого же метода суперкласса throws не указан.

Это то понятно. Нюанс вот в чем - если уж так сложилось, то на самом деле - можно. Речь идет о том, что в подклассе можно указать throws RuntimeException (это один из двух видов неконтролируемых исключений, 1-ый вид неконтролируемых исключений - Error).

Пример полностью корректного кода (проверил в Eclipse):

class AnyClass
{
   public static void main(String [] args)
    {
        System.out.println("AnyClass.main()");
       
        AnyClass anyClass= new AnyClass();
        anyClass.testInnerValue();
       
   }
 
   void testInnerValue()
   {
        InnerB ib = new InnerB();
       
        try
        {
            int iv = ib.getInnerValue();
        }
        catch (Exception e)
        {
            System.out.println("Test testInnerValue() is OK.");
        }
   }
  
   class InnerA
   {
        // В методе подкласса исключения throws нет.
        public int getInnerValue()
        {
            return 5;
        }
    }
   
    class InnerB extends InnerA
    {
        /* В переопределяемом методе суперкласса
        исключение throws есть. */
        @Override
        public int getInnerValue() throws RuntimeException
        {
            throw new RuntimeException("bla-bla-bla");
        }
    }

}

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

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

0 коммент.:

Отправить комментарий