泛型、繼承和子類型
如你所知,只要類型兼容,就可以將一種類型的對象分配給另一種類型的對象,例如,你可以將Integer分配給Object,因為Object是Integer的超類型之一:
Object someObject = new Object(); Integer someInteger = new Integer(10); someObject = someInteger; // OK
在面向對象的術語中,這被稱為“是一種”關系,由于Integer是一種Object,因此允許賦值,但是Integer也是一種Number,所以下面的代碼也是有效的:
public void someMethod(Number n) { /* ... */ } someMethod(new Integer(10)); // OK someMethod(new Double(10.1)); // OK
泛型也是如此,您可以執行泛型類型調用,將Number作為其類型參數傳遞,如果參數與Number兼容,則允許任何后續的add調用:
Boxbox = new Box (); box.add(new Integer(10)); // OK box.add(new Double(10.1)); // OK
現在考慮以下方法:
public void boxTest(Boxn) { /* ... */ }
它接受什么類型的參數?通過查看其簽名,你可以看到它接受一個類型為Box
在使用泛型編程時,這是一個常見的誤解,但這是一個重要的學習概念。
給定兩個具體類型A和B(例如,Number和Integer),MyClass與MyClass無關,無論A和B是否相關,MyClass和MyClass的公共父級是Object。泛型類和子類型有關如何在類型參數相關時在兩個泛型類之間創建類似子類型關系的信息,請參閱通配符和子類型。
你可以通過擴展或實現泛型類或接口來對其進行子類型化,一個類或接口的類型參數與另一個類或接口的類型參數之間的關系由extends和implements子句確定。
使用Collections類作為示例,ArrayList
現在假設我們想要定義我們自己的列表接口PayloadList,它將泛型類型P的可選值與每個元素相關聯,它的聲明可能如下:
interface PayloadListextends List { void setPayload(int index, P val); ... }
PayloadList的以下參數化是List
PayloadList
PayloadList
PayloadList
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72920.html
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續版本中引入的改進。 Java教程是希望使用Java編程語言創建應用程序的程序員的實用指南,其中包括數百個完整的工作示例和數十個課程,相關課程組被組織成教程。 覆蓋基礎知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術和安裝Java開發軟件并使用...
摘要:泛型之上界下界通配符本教程是為編寫的。這是在使用泛型編程時一個常見的誤解,也是一個需要學習的重要概念。通配符使用指南學習使用泛型編程時,更令人困惑的一個方面是確定何時使用上限有界通配符以及何時使用下限有界通配符。 Java 泛型之上界下界通配符 本Java教程是為JDK 8編寫的。本頁描述的示例和實踐沒有利用后續版本中引入的改進。 泛型,繼承和子類 如你所知,只要類型兼容,就可以將一種...
類型推斷 類型推斷是Java編譯器查看每個方法調用和相應聲明的能力,以確定使調用適用的類型參數,推理算法確定參數的類型,如果可用,還確定分配或返回結果的類型,最后,推理算法嘗試查找適用于所有參數的最具體類型。 為了說明最后一點,在下面的示例中,推斷確定傳遞給pick方法的第二個參數是Serializable類型: static T pick(T a1, T a2) { return a2; } ...
有界類型參數 有時你可能希望限制可用作參數化類型中的類型參數的類型,例如,對數字進行操作的方法可能只想接受Number或其子類的實例,這是有界類型參數的用途。 要聲明有界類型參數,請列出類型參數的名稱,然后是extends關鍵字,后跟其上限,在此示例中為Number,請注意,在此上下文中,extends在一般意義上用于表示extends(如在類中)或implements(如在接口中)。 publi...
摘要:泛型方法泛型類中可以定義靜態非靜態的泛型方法。上述泛型類會被替換成下面形式一般使用第一個限定類型替換變為原始類型,沒有限定類型,使用替換。 引言 在面向對象的世界里,我們如果需要一個容器來盛裝對象。舉個例子:一個籃子。我們可以用這個籃子裝蘋果,也可以用這個籃子裝香蕉。基于 OOP 的思想,我們不希望為蘋果和香蕉分別創建不同的籃子;同時,我們希望放進籃子里的是蘋果,拿出來的還是蘋果。于是...
閱讀 1354·2021-11-15 11:45
閱讀 3122·2021-09-27 13:36
閱讀 2866·2019-08-30 15:54
閱讀 984·2019-08-29 12:38
閱讀 2905·2019-08-29 11:22
閱讀 2983·2019-08-26 13:52
閱讀 2024·2019-08-26 13:30
閱讀 583·2019-08-26 10:37