2010-01-27 91 views
6

當你想添加一些額外的信息轉化爲一類,你會喜歡什麼樣的方式:你會繼承這個類或使周圍的包裝?java的擴展或包裝類,以添加額外的功能

在我特別的情況下,我想添加一些分頁信息,我從數據庫中獲得List。這分頁信息將包括:

int currentPage; 
int totalResults; 
int containedResultsIndex; 
int totalcontainedResults; 

和幾個方法:

Boolean isNextPageAvailable(); 
Boolean isPrevPageAvailable(); 

請告訴我你的意見,擴大或包裹?

回答

4
    你的情況
  • 包裝現有List,讓你的類實現List本身,委託的所有方法的原始列表(在構造函數中傳遞,例如)
  • 繼承總是沒有錯,但在這種情況下,你不會知道什麼類可以延長 - 將是ArrayListLinkedList
3

太多的延伸是邪惡的,並且會讓你的代碼難以閱讀/理解隨着作文,只是創建一個新的類有一個集合和你的額外成員需要分頁。

1

我更喜歡在可能的情況下換行。特別是在您的List示例中 - 包裝類可以包含任何列表類型,而擴展類綁定到特定的具體超類。

8

這聽起來像你問你是否應該在你的情況下支持繼承或組合。我想說的是,您並沒有創建List的新實現,而且您也不在乎List是如何實現的,因此繼承不適合您的問題。相反,你正在提供分頁功能。我會創建一個類,通常使用List或其他通用集合來包裝(封裝)分頁邏輯。

0

即使擴展,也不能通過超類引用調用新方法。最好只包裝它。

0

擁有一個優雅的PagingList(擴展List)是一個適當的方法。

  • 爲什麼委託你什麼時候可以繼承你所需要的東西?

  • 這就像和使用FileReader BufferedFileReader之間的關係(沒有人會說這是不好的做法)。

相關問題