private static String getOperandText(EditText operandEditText) {
String operandText = operandEditText.getText().toString();
if(TextUtils.isEmpty(operandText)){
throw new NumberFormatException("Operand cannot be empty");
}
return operandText;
}
private static Double getOperand(EditText operandEditText) {
String operandText = getOperandText(operandEditText);
return Double.valueOf(operandText);
}
В этом коде я получаю число, которое ввел в EditText, и если оно пустое то выбрасывается исключение. Так вот почему именно нужно выбросить исключение. Почему нельзя сделать
if(TextUtils.isEmpty(operandText)){
TextView.setText("Cannot be empty")
}
Вот код который вызывает этот метод:
private void compute(Calculator.Operator operator) {
double operandOne;
double operandTwo;
try {
operandOne = getOperand(mOperandOneEditText);
operandTwo = getOperand(mOperandTwoEditText);
} catch (NumberFormatException nfe) {
Log.e(TAG, "NumberFormatException", nfe);
mResultTextView.setText(getString(R.string.computationError));
return;
}
String result;
switch (operator) {
case ADD:
result = String.valueOf(
mCalculator.add(operandOne, operandTwo));
break;
case SUB:
result = String.valueOf(
mCalculator.sub(operandOne, operandTwo));
break;
case DIV:
result = String.valueOf(
mCalculator.div(operandOne, operandTwo));
break;
case MUL:
result = String.valueOf(
mCalculator.mul(operandOne, operandTwo));
break;
default:
result = getString(R.string.computationError);
break;
}
mResultTextView.setText(result);
}
И я не пойму, что делает return внутри блока catch? Он завершает метод compute ??!
Это концептуально спорный вопрос.
Некоторые считают, что если на вход в метод приходят не валидные параметры или какие-то данные, необходимые для вычисления, не валидны, то нужно выбрасывать исключение. Вполне распространённая практика.
Вот только в вашем примере, оно реализовано наполовину. Методы, выбрасывающие исключение, должны указывать, какие исключения могут быть выброшены:
private static String getOperandText(EditText operandEditText) throws NumberFormatException {
String operandText = operandEditText.getText().toString();
if(TextUtils.isEmpty(operandText)){
throw new NumberFormatException("Operand cannot be empty");
}
return operandText;
}
Ну а return в catch выходит из метода. Т.е, метод compute дальше выполняться не будет.
В вашем примере даже если getOperandText не выбросить исключение, а просто вернёт null, то NumberFormatException всё равно вылетит в getOperand на строке Double.valueOf.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости