Пытаюсь сделать так, чтобы выполнялось арифметическое действие, и, в зависимости от того, какое число должно выводиться на экран, метод возвращал или int или double.
реализую это так:
@FunctionalInterface
public interface JoinMathAction
public class GoMath
{
public
if (arg1 instanceof Integer && arg2 instanceof Integer) {
JoinMathAction
}
case "-": {
return argFirst - argSec;
}
case "+": {
return argFirst + argSec;
}
}
return 0;
};
res = mm.mathAction(arg1, arg2);
} else if (arg1 instanceof Double || arg2 instanceof Double) {
JoinMathAction
switch (op) {
case "/": {
if(argFirst == 0 || argSec == 0)
{
try
{
throw new DivZeroException("Ділення на 0 неможливе");
}
catch (DivZeroException d)
{
System.out.println(d.getMessage());
}
}
else
{
return argFirst / argSec;
}
}
case "*": {
return argFirst * argSec;
}
case "-": {
return argFirst - argSec;
}
case "+": {
return argFirst + argSec;
}
}
return result;
};
res = mm.mathAction(arg1, arg2);
}
return (T) res;
}
}
Все работает, но как сделать с двух switch один? И как это сделать грамотно?
Ответ
Что не так с генериками уже объяснили. Я же представлю вариант выхода из безвыходной ситуации с одним switch-ом.
Сделайте из Number BigDecimal. У него есть методы, реализующие арифметические операции. Складывайте, вычитайте, умножайте и делите BigDecimal в одном switch-е, а результат переведите обратно в int или double:
public
Вообще-то не обязательно использовать BigDecimal. Можно тот же double с успехом применить.
Комментариев нет:
Отправить комментарий