1.需求
僅一次方法呼叫就能返回多個不同型別物件。大家應該經常遇到這樣的需求,但是就我們所知的return語句只允許返回單個物件。
2.解決方案
方案一:
直接控制方法值返回map物件,每次在方法返回物件時,動態建立所需要返回的多個物件的物件map集合。
方案二:
建立乙個物件,用它來持有想要返回的多個物件,需要在每次需要的時候,專門建立乙個類來完成這樣的工作。
方案三:
通過泛型的建立乙個元組類庫,一次性解決該問題,以後可直接使用該類庫作為返回物件。同時,我們在編譯器就能確保型別安全。具體介紹一下元組的概念。
3.方案三具體解決方案
元組:將一組物件直接打包儲存於其中的乙個單一的物件,這個容器物件允許讀取其中元素,但是不允許向其中存放新的物件。(也稱為資料傳遞物件或者信使)
通常,元組可以具有任意長度,同時,元組物件可以是任意不同的型別,不過我們希望能夠為物件指明其型別,並且從容器中讀取出來時,可以得到正確的型別,要處理不同長度的問題,需要建立多個不同的元組,如下例子是乙個二維選組物件,它可以儲存兩個任意型別的物件,並且隱含的保持了其中元素的次序。
/**
* 兩物件元組基類
* * @param 泛型物件a
* @param泛型物件b
* @author alex
*/public class twotuplebase
public a getfirst()
public b getsecond()
@override
public string tostring() ';}}
分析一下上面的元組基類,我們之所以使用public修飾符而沒有使用private修飾符,原因如下:客戶端程式可以讀取到first和second物件,然後可以隨心所欲的使用這兩個物件,但是它們卻無法將其他值賦予first或者second,因為變數物件使用了final宣告。
另外還有一種設計考慮,即你希望允許客戶端改變first和second所引用的物件,如果想要使用具有不同元素的元組,就像只要求它們建立乙個新的twotuple物件。
當然也可以使用private修飾符修飾,使用get方法獲取。
之後我們可以利用繼承機制實現長度更長的元組,組成所需要的元組基類。如:
/**
* 三物件元組基類
* * @param 泛型物件a
* @param泛型物件b
* @param 泛型物件c
* @author alex
*/public class threetuplebaseextends twotuplebase
public c getthird()
@override
public string tostring() ';}}
在我們使用元組的時候,只需選擇長度合適的元組,將其作為方法的返回值,然後在return語句中建立該元組,並返回即可。如:
java 泛型 元組類庫
做為程式設計師是不是希望一次方法呼叫就可以返回多個物件,是的,我經常需要這樣的做。可是return語句只支援返回單一物件。怎麼辦?那就建立乙個物件,用它裝載需要返回的物件,有點像容器的概念,這個容器只能讀取,不可以向內新增物件。有了泛型後,我們就可以一次解決此問題了。這個概念被稱為元組。public...
泛型之泛型類
public class a 構造引數型別上使用泛型 public a t t 方法返回值上使用泛型 public t gett 方法的引數上使用泛型 這是泛型類的方法,而不是泛型方法 public void sett t t 方法的返回值和引數型別上使用泛型 public t foo t t pu...
泛型之泛型類
public class a 構造引數型別上使用泛型 public a t t 方法返回值上使用泛型 public t gett 方法的引數上使用泛型 這是泛型類的方法,而不是泛型方法 public void sett t t 方法的返回值和引數型別上使用泛型 public t foo t t pu...