gpt4 book ai didi

java - 关于在 Java 中覆盖的查询

转载 作者:行者123 更新时间:2023-11-29 05:45:33 25 4
gpt4 key购买 nike

假设我有一个这样的界面:

public interface Test {
//Basically life cycle methods
public void beforeStart();
public void start();
public void end();
}

还有一个抽象类,它为所有方法提供基本或空的实现。

public abstract class TestAdapter implements Test {
//Implementations here
}

这样扩展 TestAdapter 的客户端可以覆盖一个或所有生命周期方法。我要求每个消费者都应该扩展 TestAdapter 类,他们可以覆盖 TestAdapter 中的所有生命周期方法,或者覆盖其中一个,或者不覆盖生命周期方法。

但问题是 TestAdapter 的每个消费者都会创建一个 POJO 类的实例,应该为其管理生命周期,即 beforeStart() 等。

我的问题是:

  1. 如果客户端覆盖所有生命周期方法没有问题,但如果他不覆盖任何方法,我应该能够为该特定生命周期方法执行默认服务,我需要引用用户在 testAdapter 实现类中创建了 POJO。我该如何着手实现?
  2. 如您所知,这有点类似于 servlet 的生命周期。那么有人可以指导我吗?还是我让我的设计复杂化了?

如果您需要更多说明,请告诉我。

编辑:注意:如果您觉得我在尝试重新发明轮子,您能否针对上述要求提出任何替代方案?

最佳答案

首先,我认为您应该像在大多数测试框架中看到的那样使用注释:

@BeforeClass
public void beforeClass() {
// code here
}

@BeforeMethod
public void beforeMethod() {
// code here
}

如果你真的想坚持继承,你可以这样做:

public abstract class TestAdapter implements Test {

private AbstractPojo myPojo;

protected void doBeforeStart(){
// do something which you always want to happen
beforeStart();
}
protected void doStart() {
start();
}
protected void doEnd() {
end();
}

// your empty implementations of Test here

// getter and setter for myPojo
}

在这种情况下,您可以在内部控制应该发生什么,并让您的用户在他们认为合适的时候覆盖界面中的方法。

关于java - 关于在 Java 中覆盖的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com