如何组织这些抽象页面对象方法?

时间:2013-02-11 16:23:28

标签: java webdriver abstract

这实际上是一个普通的Java问题,但我认为使用它产生的特定Webdriver透视图会更容易解释。

我有一个复杂的页面对象,我现在想要抽象,因为我发现另一个页面非常相似但在关键方面有所不同。现在,许多返回页面对象实例的方法都被破坏了。我想在抽象类中保留这些方法的大部分代码,并且仍然让它们返回新子类的实例;这些方法应返回任何称为它们的子类的新实例。

这是一个navNextPage方法的示例,它对两个子类都是通用的。这似乎有效,但感觉不对:

public abstract class PresContentPage {
     protected PresContentPage navNextPage() {
          // code to navigate to the next page goes here
          return null;
     }
}

public class MainContent extends PresContentPage {
     public MainContent navNextPage() {
          super.navNextPage();
          return new MainContent(...);
     }
}

// And so on with another subclass...

所以,这就是我想要的:navNextPage方法的代码在抽象类中被孤立,但被调用的版本将返回调用该方法的类型的页面对象。

我只是觉得我的受保护方法错了,它不是也不能为空,返回null。但既然它受到了保护,而且它是一个抽象的类,那么无论如何都没有人能够调用它,对吧?那可以吗?有没有更好的方法来做到这一点,我从来没有学过?

我想到的另一个选择是使用不同的名称(例如navNextPageVoid)创建一个void方法,并让子类调用而不是super.navNextPage,但是......这似乎有点粗略不同的方式。

提前致谢!

1 个答案:

答案 0 :(得分:0)

通常,如果您想强制在专业化中实施某个方法,请将其设为abstract in the generalisation。因此

  

公共抽象类PresContentPage {        abstract PresContentPage navNextPage(); }