更安全的编译时String.format()替代问题2

时间:2014-07-15 22:49:22

标签: java enums abstraction string.format

使用String.format,似乎在编译时找不到编程错误的大开口。这可能使修复错误更复杂和/或花费更长时间。对于我来说,这是我打算修复(或破解解决方案)的问题。我走近了,但我还不够近。对于这个问题,这肯定是过度设计的。我理解这一点,但我只想找到一个很好的编译时解决方案。

可在此处找到更多信息。我的问题涉及

基础课程

2个计算器。 1逻辑后端。可以扩展到包括其他简单的计算器。

我想要一个类来处理任何这类简单计算器的所有操作(listeners)。

由于这个推理,我决定用Enums抽象格式字符串 - https://stackoverflow.com/a/9850656/2333021。每个表达式都有一定数量的"分区",它将以更易读和可靠的形式出现。

OnClickListener

我有一个listener应该只处理执行从UI获取数字的逻辑,执行计算,以及将结果设置到UI。它不应该知道结果的格式。解决方案应该允许在编译时找到错误,而不是运行时。

现在我的实施似乎遇到了其中一些

    @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,我认为这只是一个问题,因为我设置项目的方式。我希望有多个UI,看起来,控制稍有不同,并且行为有点不同......

  • MainActivity :显示枚举表达式字符串
  • MainActivityDoge :显示枚举DogeExpression字符串
  • MainActivity_X :显示枚举X_Expression String例如...每个UI都有相同的按钮,每个都连接到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)个代码,而且我不会有重复的内容。我使用策略模式抽象出数学逻辑。这个类应该只关心如何进行数学运算。它不应该关心它在UI上的显示方式,但它需要分配/更新表达式。

如何实现上述目标?

0 个答案:

没有答案