Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Java中重写的查询_Java - Fatal编程技术网

关于Java中重写的查询

关于Java中重写的查询,java,Java,假设我有这样一个界面: public interface Test { //Basically life cycle methods public void beforeStart(); public void start(); public void end(); } public abstract class TestAdapter implements Test { private AbstractPojo myPojo; protected voi

假设我有这样一个界面:

public interface Test {
  //Basically life cycle methods
  public void beforeStart(); 
  public void start();
  public void end();
}
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
}
还有一个抽象类,它为所有方法提供基本的或空的实现

public abstract class TestAdapter implements Test {
   //Implementations here
}
因此,扩展
TestAdapter
的客户端可以覆盖一个或所有生命周期方法。我要求每个使用者都应该扩展
TestAdapter
类,他们可以覆盖
TestAdapter
中的所有或一个或一个生命周期方法

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

我的问题是:

  • 如果客户端重写所有生命周期方法,则没有问题,但如果他不重写任何方法,我应该能够为该特定生命周期方法执行默认服务,并且我需要在
    testAdapter
    实现类中引用用户创建的POJO。我怎样才能继续实施这个
  • 正如您所知,这与servlet的生命周期有些相似。有人能指引我吗?还是我让我的设计复杂化了
  • 请让我知道,如果你需要更多的澄清同样

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

    您可以在控制POJO对象的方法中使用参数。
    另一方面,有很多现成的框架可以使用,而不是创建自己的框架,为什么还要再发明轮子呢?

    这个问题是“一步一步地创建对象”。这是一个解决办法


    下面是用java实现构建器模式的示例

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

    @BeforeClass
    public void beforeClass() {
      // code here
    }
    
    @BeforeMethod
    public void beforeMethod() {
      // code here
    }
    
    如果你真的想坚持继承,你可以这样做:

    public interface Test {
      //Basically life cycle methods
      public void beforeStart(); 
      public void start();
      public void end();
    }
    
    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
    }
    

    在这种情况下,您可以在内部控制应该发生什么,并让用户根据自己的需要覆盖界面中的方法。

    POJO和testAdapter有何关联?它是testAdapter的成员还是testAdapter的改编?@HimanshuBhardwaj testAdapter包含POJO生命周期的空/一些默认实现,客户端通过扩展testAdapter类来提供这些实现。如果我必须为POJO实现一种生命周期机制,首先,我的POJO中有一个属性,它保存当前的LifeCycleState。在您的案例中,我会有一个公共类testAdapter或其扩展来管理生命周期,并且状态将是枚举的一部分,这样所有的用户都不会以自己的方式来处理它。您可以在方法中有一个参数来控制POJO对象。您能详细说明一下吗?谢谢,但我有一些POJO,客户机将通过扩展抽象类来提供它。所以我的问题是,我怎样才能把这个引用传递给上面所有的同学?或者我应该首先在抽象类中创建某种对象,并将客户机提供的pojo传递给它?可能吗?您可以在抽象类中创建一个get/setPojo方法,并在那里为其创建一个字段。因此,在实现中,用户可以使用setPojo(myPojo),父类将看到引用。这就是你想要的吗?我想你是对的。所以父类可以使用它引用,并且客户端提供的值对它是可见的?谢谢,我认为这有点接近我的解决方案,但我将等待更多的答案:)