这确实是一个一般的 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 是错误的。但是由于它是受保护的,而且它是一个抽象类,所以无论如何都没有人能够调用它,对吧?这样可以吗?有没有更好的方法来做到这一点,而我从来没有学过?
我想到的另一个选择是创建一个具有不同名称的 void 方法,navNextPageVoid
并让子类调用它而不是super.navNextPage
, 但是......这似乎以不同的方式令人毛骨悚然。
提前致谢!