1

这确实是一个一般的 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, 但是......这似乎以不同的方式令人毛骨悚然。

提前致谢!

4

1 回答 1

0

通常,如果您想强制一个方法在专业化中实现,您可以在泛化中将其抽象化。所以

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

于 2013-02-11T18:03:29.287 回答