Java 如何组织这些抽象页面对象方法?
这确实是一个一般的Java问题,但我认为用它产生的特定Webdriver视角来解释会更容易 我有一个复杂的页面对象,我现在想把它抽象出来,因为我发现另一个页面非常相似,但在关键方面有所不同。现在,我的许多方法(返回了page对象的实例)都被破坏了。我希望将这些方法的大部分代码保留在抽象类中,并且仍然让它们返回新子类的实例;这些方法应该返回调用它们的任何子类的新实例 下面是一个navNextPage方法的示例,该方法对于这两个子类都是通用的。这似乎有效,但感觉不对:Java 如何组织这些抽象页面对象方法?,java,webdriver,abstract,Java,Webdriver,Abstract,这确实是一个一般的Java问题,但我认为用它产生的特定Webdriver视角来解释会更容易 我有一个复杂的页面对象,我现在想把它抽象出来,因为我发现另一个页面非常相似,但在关键方面有所不同。现在,我的许多方法(返回了page对象的实例)都被破坏了。我希望将这些方法的大部分代码保留在抽象类中,并且仍然让它们返回新子类的实例;这些方法应该返回调用它们的任何子类的新实例 下面是一个navNextPage方法的示例,该方法对于这两个子类都是通用的。这似乎有效,但感觉不对: public abstract
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方法的代码存储在抽象类中,但是被调用的版本将返回调用该方法的类型的page对象
我只是觉得让我的受保护方法返回null是不对的,它不是也不能是空的。但是因为它是受保护的,而且是一个抽象类,所以无论如何,没有人能够调用它,对吗?这样可以吗?有没有比这更好的方法,我从来没有学过
我想到的另一个选择是使用不同的名称创建一个void方法,比如navNextPageVoid
,并让子类调用它,而不是super.navNextPage
,但是。。。从另一个角度看,这似乎有点恶心
提前谢谢 通常,如果您想强制某个方法在某个专业领域中实现,那么您可以选择它。所以 公共抽象类PreContentPage{ 抽象PreContentPage navNextPage();}
事实上,我可以做到这一点——但方法的实现将完全相同——并且只使用来自抽象类的数据——除了最终的返回语句。因此,我试图将共享代码保存在抽象类中,而不是在每个子类中都有两个副本。现在我已经决定使用一个navNextPageVoid方法,除了在抽象类中的最终返回之外,它可以执行所有操作。