Более безопасная альтернатива String.format () во время компиляции 2
СString.format
Похоже, что существует большое открытие для программной ошибки, которая не обнаруживается во время компиляции. Это может усложнить исправление ошибок и / или занять больше времени. Это была проблема для меня, которую я решил исправить (или взломать решение). Я подошел близко, но я не достаточно близко. Для этой проблемы это более определенно чрезмерно спроектировано. Я понимаю это, но я просто хочу найти хорошее решение этой проблемы во время компиляции.
Более подробную информацию можно найти здесь. Мой вопрос, касающийся
Основная программа2 калькулятора. 1 Логический бэкэнд. Может быть расширен, чтобы включить другие простые калькуляторы.
Я хотел, чтобы 1 класс имел дело со всеми операциями (listeners
) для любого такого простого калькулятора.
Я решил абстрагировать форматную строку от Enums по этой причине -https://stackoverflow.com/a/9850656/2333021, Каждое выражение будет иметь определенное количество «делений», и оно будет в более читаемой и надежной форме.
OnClickListenerу меня естьlistener
это должно касаться только выполнения логики, получения чисел из пользовательского интерфейса, выполнения вычислений и установки результата в пользовательский интерфейс. Не следует знать формат результатов. Решение должно позволять обнаруживать ошибки во время компиляции, а не во время выполнения.
Прямо сейчас моя реализация, кажется, встречает некоторые из тех
@Override
public void onClick(View v) {
// Get number 1 and number 2. Perform operation via Strategy Pattern
{
// ISSUE This seems to be fine if I only cared about THIS class only dealing with one expression, but I want it to handle both (not at the same time though)
// These seem too coupled right now. I just have both Expression and
// DogeExpression here for now. But I do kind of like the the execution
Expression.Number1.update(num1); // Enum Expression
Expression.Number2.update(num2);
Expression.Operator.update(operator.getSign());
Expression.Result.update(total);
DogeExpression.Total.update(total); // Enum DogoExpression
}
UI.setResult(Expression.Update.print());
// UI.setResult(DogeExpression.Update.print()); // Switch to this for DogeExpression
}
вопросСOperationClick
Я думаю, что это единственная проблема из-за того, как я настроил проект. Я хотел иметь несколько интерфейсов, которые выглядят, имеют немного разные элементы управления и действуют немного по-другому ...
btnAdd.setOnClickListener(new OperationClick(Add).listenerOn(this));
btnSub.setOnClickListener(new OperationClick(Subtract).listenerOn(this));
btnMul.setOnClickListener(new OperationClick(Multiply).listenerOn(this));
btnDiv.setOnClickListener(new OperationClick(Divide).listenerOn(this));
мойOperationClick
у класса есть мойonClick(View v)
код, и я не хочу иметь дубликаты. Я абстрагировал математическую логику, используя шаблон Стратегии. Этот класс должен интересоваться только тем, как выполнять математические операции. Он не должен заботиться о том, как он будет отображаться в пользовательском интерфейсе, но ему нужно назначить / обновить выражение.