【问题标题】:How to create a java method on a base class that calls other methods?如何在调用其他方法的基类上创建 java 方法?
【发布时间】:2020-02-02 21:26:55
【问题描述】:

我正在尝试使用需要在执行实际逻辑之前和之后调用私有方法的方法来构建基类。

public abstract class Base {

  public Base() {}

  private void before() {
    // doSomething
  }

  private void after() {
    // doSomething
  }

  public void actual(Object object) {
    before();
    // doSomething
    after();
  }

}

public class SomeClass extends Base {

  public SomeClass() {}

  public void actual(Object object) {
    // actual code that needs to be executed between before and after methods.
  }

}

我该怎么办?

【问题讨论】:

  • 添加一个受保护的抽象方法来代替// doSomething(在actual 中)并考虑将actual 设为final。
  • 在基类中创建protected 方法而不是private 怎么样?仅当您想继承这些方法时才这样做(实现保持在Base 中)。或者,你可以按照@Slaw 所说的去做。

标签: java extends base


【解决方案1】:

创建另一个可以被覆盖和实现的方法,而不是直接覆盖actual

例如

public void actual(Object object) {
    before();
    doActual(object);
    after();
}

protected abstract void doActual(Object object);

如果您想确保没有人错误地覆盖它,您可以将actual() 方法设为final

【讨论】:

  • 如果由于某种原因必须调用 before() 和 after(),那么 actual 应该是私有的,因此子类不能覆盖它。
  • @jalynn2 actual 方法是允许用户间接调用doActual 的公共API,将其设为私有将无法达到目的。也许您的意思是建议将其定为最终版本?
  • 也许不希望类能够覆盖它是一个很好的观点。一个解决方案是将其设为final。我已经编辑了帖子以提及这一点。
【解决方案2】:

您可以将方法设为抽象,例如

protected abstract void actual(Object object);

并创建另一个将被调用的公共方法

public void init(Object object){
  before();
  actual(object);
  after();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2020-07-29
    相关资源
    最近更新 更多