2016-01-29 4 views
0

У меня возникли проблемы с пониманием последствий кода в моем методе доступа ниже. Компилятор Eclipse требует, чтобы у меня есть оператор возврата после мой блок try-catch. Означает ли это, что мой метод getter всегда будет возвращать значение null или он вернет элемент, который я пытаюсь получить, если он не должен быть пойманным методом IndexOutOfBoundsException?Возврат null ПОСЛЕ блока try-catch

public T get(int i) 
{ 
    try 
    { 
     return bag[i]; 
    } 
    catch(IndexOutOfBoundsException e) //if(logiSize < i+1) 
    { 
     System.out.println("Collection has fewer items than the index you entered!"); 
     System.out.println("Returning null"); //or should I...? 
    } 
    return null; 
} 

Может ли кто-нибудь помочь мне понять последствия здесь? Спасибо!

+0

Если IOOBE происходит и блок задвижка вводится ** ** ничего не возвращается, и это не кошерно. Поэтому либо возвращайтесь из блока catch, либо после него. –

+0

В «реальном коде», однако, это случай, когда было бы прекрасно, если бы просто * исключалось исключение * и пузырь к вызывающему. Из 'List':« IndexOutOfBoundsException »- если индекс выходит за пределы диапазона (индекс <0 || index> = size())« – chrylis

+0

@HovercraftFullOfEels в порядке, так что это общее правило, чтобы убедиться, что что-то возвращено incase то, что было пробовано, не работает/не выполняется, не так ли? – Her

ответ

2

Ваш метод вернет bag[i], если у вас нет исключения IndexOutOfBoundsException, выполняющего оператор return. В этом случае они исключаются, и, поскольку вы не выбрасываете другое исключение в черном червя. Метод вернется к возврату null.

Если вам нужно только проверить пределы, вы можете сделать это:

public T get(int i, T[] bag) { 
    if(i < bag.length) { 
     return bag[i]; 
    } 
    return null; 
} 
+0

О, ничего себе! Ладно, большое спасибо! Поэтому я предполагаю, что в этом случае мне действительно не нужно использовать блок try-catch ... Однако я должен выполнить эту конкретную реализацию. Но я рад узнать, что есть несколько способов сделать это. :) – Her