這實際上是一個普通的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
方法的代碼在抽象類是孤立的,而是被調用的版本將返回的頁面對象調用該方法的類型。
我只是覺得我的受保護的方法不是,也不能是void,返回null。但由於它是受保護的,而且它是一個抽象類,所以沒人會永遠無法稱呼它,對嗎?這能讓它好嗎?有沒有更好的方式來做到這一點,我從來沒有學過?
我想到的另一個選擇是用一個不同的名稱,如navNextPageVoid
做一個void方法,並讓子類調用該方法而不是super.navNextPage
,但是......看起來有點不一樣。
在此先感謝!
事實上,我可以這樣做 - 但方法的實現將完全相同 - 只使用抽象類中的數據 - 除了最終的return語句之外。所以我試圖將共享代碼保留在抽象類中,而不是在每個子類中都有兩個副本。現在我已經有了一個navNextPageVoid方法,它可以完成所有的事情,但是抽象類中的最終返回。 – 2013-02-11 18:21:44