Более безопасная альтернатива 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Я думаю, что это единственная проблема из-за того, как я настроил проект. Я хотел иметь несколько интерфейсов, которые выглядят, имеют немного разные элементы управления и действуют немного по-другому ...

Основная деятельность : отображает строку выражения enumMainActivityDoge : отображает строку перечисления DogeExpressionMainActivity_X : отображает enum X_Expression String, например ... каждый пользовательский интерфейс имеет одинаковые кнопки, и каждый подключен к 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) код, и я не хочу иметь дубликаты. Я абстрагировал математическую логику, используя шаблон Стратегии. Этот класс должен интересоваться только тем, как выполнять математические операции. Он не должен заботиться о том, как он будет отображаться в пользовательском интерфейсе, но ему нужно назначить / обновить выражение.

Как я могу достичь вышеуказанного ??

Ответы на вопрос(0)

Ваш ответ на вопрос