我有一個叫做PageObject的超類,然後有兩個叫做AlphaPage和BetaPage的子類繼承PageObject。 函數「selectPage()」將返回這些頁面中的一個,但只有在運行時才能知道要返回的特定頁面。如果我的java函數的返回值是僅在運行時已知的兩個可能對象之一,那麼應該返回什麼對象?
該函數的返回對象應該是什麼,然後,這將避免必須將其中一個子類轉換爲函數調用的返回值?
我有一個叫做PageObject的超類,然後有兩個叫做AlphaPage和BetaPage的子類繼承PageObject。 函數「selectPage()」將返回這些頁面中的一個,但只有在運行時才能知道要返回的特定頁面。如果我的java函數的返回值是僅在運行時已知的兩個可能對象之一,那麼應該返回什麼對象?
該函數的返回對象應該是什麼,然後,這將避免必須將其中一個子類轉換爲函數調用的返回值?
由於信息只在執行時間知道,所以如果他們想要特定類型,則調用者將會具有來施放。基本上,您應該返回PageObject
。
當然,如果主叫方並不需要具體的事情來AlphaPage
或BetaPage
- 如果他們可以只使用方法(可能是抽象)宣佈PageObject
,那麼就沒有必要投。這將是理想的使用多態性來處理差異。這真的取決於調用者需要做什麼。
你可以定義一個接口,並指定其功能的頁面應該提供的,那麼你的頁面,類將因此實現這個接口提供所需的功能
public interface pageable {
pageable selectPage();
...
}
PageObject implements pageable {
pageable selectPage(){
...
}
...
理想的情況下,我建議定義一個通用Interface
將實施由AlphaPage
和BetaPage
,因爲兩者都會有很多共同的行爲。
或者,您可以聲明一個抽象類(也許PageObject
類),它可以實現您的頁面可能具有的任何通用代碼。
所以我的答案是返回類型應該是一個普通的超類型(一個接口或抽象類)。