泛型教程(四) 有界型別引數

2021-07-24 13:19:49 字數 1415 閱讀 6319

有界型別引數(bounded type parameters)

你是否曾經。。。

你是否曾經想在乙個引數化型別(parameterized type)裡限制type argument的型別?比如乙個只處理數字的方法只想接受number或者其子類的例項。那麼就靠有界型別引數可以實現啦。

宣告有界型別引數,列出型別引數的名字,之後跟 extends 關鍵子,之後跟上界,本例中也就是number。在本文中,extends表示的就是擴充套件(extends)乙個class或者inte***ce。

public class box

public t get()

public void inspect(u u)

public static void main(string args)

}

這裡編譯就會錯誤,泛化方法裡限制了上界為number,而我們呼叫該方法是還是用string。

另外,允許你呼叫上界的方法,比如可以呼叫number的方法。下例顯示可以呼叫integer的方法

public class naturalnumber

public boolean iseven()

// ...

}

在iseven方法裡,我們呼叫了integer的方法

intvalue()

多個上界

上面之介紹了單個上界,實際中,型別引數可以有多個上界。

乙個有多個上界的型別變數是這幾個上界的子型別。如果其中乙個上界是類,則必須先寫,比如

class a

inte***ce b

inte***ce c

class d

如果不先寫a,在編譯的時候會報錯。

泛化方法和上界型別引數

上界型別引數是實現泛化演算法的關鍵。看下面的方法:計算陣列t[ ]裡面比某一元素elem大的元素的數量

public static int countgreaterthen(t anarray, t elem)

return count;

}這裡的方法實現非常明了,但是編譯不通過。因為大於操作 > 只針對原始型別,比如short,int,long.double等等。你無法用》 去比較兩個物件。去解決這個問題,讓型別引數的上界為乙個comparable介面

public inte***ce comparable

最好**改為:

public static > int countgreaterthen(t anarray, t elem)

return count;

}

泛型 引數化型別

定義 定義1 把型別引數化 定義2 例如 public class generic 此時的t便是泛型,理解 泛型是個資料型別,可以用t定義變數 引數化 目的 作用位置 類,介面,方法 特點 泛型類 不能對確切的泛型型別使用instanceof操作 泛型類不會自動封裝,不會自動轉化資料型別 測試 pu...

Swift之泛型型別與泛型引數

import foundation func swaptwoints inout a int,inout b int func swaptwostrings inout a string,inout b string func swaptwodoubles inout a double,inout ...

泛型教程(二) 源型別

源型別 源型別是乙個名字,乙個沒有任何型別引數的泛型類或者介面的名字。比如說例子中的泛型類 box public class box 去建立乙個box的引數化型別 parameterized type 你需要為型別引數 type parameter t提供乙個type argument boxint...