これは実際には一般的な 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
が...それは別の意味で大雑把に思えます。
前もって感謝します!