2012-09-18 58 views
3

我有一個叫做PageObject的超類,然後有兩個叫做AlphaPage和BetaPage的子類繼承PageObject。 函數「selectPage()」將返回這些頁面中的一個,但只有在運行時才能知道要返回的特定頁面。如果我的java函數的返回值是僅在運行時已知的兩個可能對象之一,那麼應該返回什麼對象?

該函數的返回對象應該是什麼,然後,這將避免必須將其中一個子類轉換爲函數調用的返回值?

回答

7

由於信息只在執行時間知道,所以如果他們想要特定類型,則調用者將會具有來施放。基本上,您應該返回PageObject

當然,如果主叫方並不需要具體的事情來AlphaPageBetaPage - 如果他們可以只使用方法(可能是抽象)宣佈PageObject,那麼就沒有必要投。這將是理想的使用多態性來處理差異。這真的取決於調用者需要做什麼。

0

你可以定義一個接口,並指定其功能的頁面應該提供的,那麼你的頁面,類將因此實現這個接口提供所需的功能

public interface pageable { 

pageable selectPage(); 
    ... 
} 



PageObject implements pageable { 

    pageable selectPage(){ 
     ... 
    } 

... 
1

理想的情況下,我建議定義一個通用Interface將實施由AlphaPageBetaPage,因爲兩者都會有很多共同的行爲。

或者,您可以聲明一個抽象類(也許PageObject類),它可以實現您的頁面可能具有的任何通用代碼。

所以我的答案是返回類型應該是一個普通的超類型(一個接口或抽象類)。

相關問題