首页 > 解决方案 > Java中抽象和静态方法的解决方法

问题描述

我们的框架/规则引擎将流定义为原子序列,其中向用户提出问题,然后解释他或她的结果,通常会导致转换到后续流以进行更多问题和处理。出于重用的目的,我们有一个称为“isNeeded”的模式,其中静态方法挂起 Flow 类,让其他 Flow 知道它是否在整个应用程序的序列中的任何点都需要。例如,“流程支付流程”可能有一个 isNeeded 方法,如下所示:

  public static boolean isNeeded() {
    ReasonTracker rt;
    if (User has payment due) {
       rt = new ReasonTracker(ProcessPaymentFlow.class, true, "payment due");
    } else {
       rt = new ReasonTracker(ProcessPaymentFlow.class, false, "no payment due");
    }
    return rt.isNeeded();
  }

因此,如果您在应用程序中的任何位置并想查看是否应该为用户提供 ProcessPaymentFlow,您可以调用 isNeeded() 方法,然后在适当的地方发送用户。此外,还有日志记录,因此我们可以弄清楚为什么某些用户点击了特定的流量而其他用户没有。

现在,作为对我们框架的修改,我正在尝试标准化这种方法的使用。在我的脑海中,有一个最终的静态“isNeeded()”方法调用了一个可覆盖的抽象静态“isNeededInner()”方法,可以在其中以一种面向对象强制执行的方式定义案例、日志记录和结果。然而!我确实承认这是一个矛盾的概念。

在不诉诸黑客/诡计的情况下,有没有办法在 Java 中模仿抽象静态方法的概念,或者我是否受制于我们迄今为止的想法?奖励 - 是否有某种方法可以使用 getClass() 在 this 或 super 中工作,以避免手动插入类名以进行日志记录?

标签: javadesign-patternsjava-8static-methodsabstract

解决方案


推荐阅读