Лично, и я думаю, что это подкреплено конвенцией, EAFP никогда не будет хорошим способом. Вы можете рассматривать его как эквивалент следующего:
if (o != null)
o.doSomething();
else
// handle
в отличие от:
try {
o.doSomething()
}
catch (NullPointerException npe) {
// handle
}
Кроме того, рассмотрите следующее:
if (a != null)
if (b != null)
if (c != null)
a.getB().getC().doSomething();
else
// handle c null
else
// handle b null
else
// handle a null
Это может выглядеть намного менее изящным (и да, это грубый пример - медведь со мной), но он дает вам гораздо большую гранулярность в обработке ошибки, в отличие от обертывания всего этого в попытке попробовать, чтобы NullPointerException
, а затем попытайтесь выяснить, где и почему вы его получили.
Как я вижу, EAFP никогда не должен использоваться, за исключением редких ситуаций. Кроме того, поскольку вы подняли вопрос: да, блок try-catch накладывает некоторые накладные расходы, даже если исключение не выбрано.
Это указывает на защищенный участник из класса или другого типа данных.
-
Указывает частный
+
, Указывает, что общественность
#
Указывает защищенный
'#' указывает на видимость. В этом случае это относится к защищенной операции [вырезал термин 'метод', поскольку это не столь универсально].