【百日精通JAVA | 數據結構篇】 一文了解泛型體系

一、初識泛型

在推出泛型以前,程序員可以創建一個元素類型Object的集合,該集合能夠存儲任意的數據類型對象,而在使用該集合的過程中,需要明確知道存儲每個元素的類型,否則容易引發ClassCastException異常。

泛型是JDK1.5引入的新語法,通俗講,泛型:就是適用于許多許多類型。從代碼講,就是對類型實現了參數化

JAVA為什么推出泛型?

當Integer類型轉換成String型時,會發生類型轉換錯誤,并且編譯時不會發生錯誤,很容易項目上線時,發生報錯,為了應對這種情況,推出了泛型。

泛型的概念?

Java泛型時JDK5引入的一個新特性,泛型提供了編譯時類型安全監測機制,該機制允許我們編譯時檢測到非法的類型數據結構

泛型的優點?

1.編譯時,類型檢查

2.編譯時,類型轉換

注意:泛型只存在編譯時,運行時不存在泛型這個概念,同時泛型只能接收包裝類型,不能接受普通類型

實現了一類,類中包含了一個數組成員,使得數組中可以存放任何類型的數據,也可以根據成員方法返回數組中某個下標的值

二、泛型類、接口

泛型類的語法

??Generic.java

package demo;
/*
@param<T>泛型標識————類型形參T 創建對象的時候里指定具體的數據類型
*/public class Generic<T>
{private T key;public Generic(T key){this.key = key;}public T getKey() {return key;}public void setKey(T key) {this.key = key;}@Overridepublic String toString() {return "Generic{" +"key=" + key +'}';}
}

??MainClass.java

public class MainClass {public static void main(String[] args) {//泛型類在創建對象的時候,來具體類型Generic<String> strGeneric = new Generic("a");String k1 = strGeneric.getKey();System.out.println(k1);System.out.println("---------------------------------");Generic<Integer> integerGeneric = new Generic<>(123123213);int key2 = integerGeneric.getKey();System.out.println(key2);System.out.println("-------------------------");Generic gen = new Generic();//"當我們不對其使用泛型指定類型時,里面可存儲的值可以為類型類型"}
}f

注意:

泛型不支持基本數據類型,只支持類類型

引用類型無法通過大于和小于進行比較

泛型類型邏輯上可以看作不同類型,實際上都是相同類型

三、泛型的接口

泛型接口的定義語法

Interface 接口名稱<泛型標識,泛型標識,...>{

泛型標識 方法名();

}

實現泛型接口的類,不是泛型類,需要明確實現泛型接口的數據類型。

四、泛型方法

前面我們知道,泛型類,是在實例化類的時候指明泛型的具體類型;而泛型方法,是在調用方法的時候指明泛型的具體類型。

最重要的一點我們之前使用的方法,其實只是實參是泛型參數的普通方法,并不叫做泛型方法。

 
public class xx<T>
{
private T key;
Public T setKey(T key)
{this.key = key;
} 
Public T getKey()
{return key;}
}

定義一個泛型方法需要在返回值前面定義一個<>,里面填入泛型參數,T E ... 等等泛型參數

Public 與返回鍵中間<T>非常重要,可以理解為聲明此方法為泛型方法

只有聲明了<T>的方法才是泛型方法,泛型類中的使用了泛型的成員方法并不是泛型方法。

<T>表明該方法將使用泛型類型T,此時才可以在方法中使用泛型類型T

泛型方法與可變參數

為什么靜態方法訪問不了類上的泛型參數

這是因為,我們在指定泛型參數的具體類型時,是在實例化該類時指定的,實例化后和類型有關,所以靜態方法和靜態屬性訪問 泛型參數,必須在static后添加<T,E......>

五、類型通配符

類型通配符一般是使用”?“代替具體實參類型

所以,類型通配符是類型實參,而不是類型形參。

??Box.java

 
  package Demo01;public class Box<E> {private E first;public E getFirst() {return first;}public void setFirst(E first) {this.first = first;}}

??Test.java

 
package Demo01;
public class Test {public static void main(String[] args) {Box<Number> box1= new Box<>();box1.setFirst(100);showBox(box1);Box<Integer> box2 = new Box<>();box2.setFirst(200);showBox(box2);}public static void showBox(Box<?> box){Object first = box.getFirst();System.out.println(first);}
}

六、類型擦除

編譯階段,編譯器會進行類型檢測, 一旦通過編譯檢測,進入運行階段,此時泛型這個概念就會消失,通常我們說的,泛型只停留在編譯階段就是這個道理,所有的對象都屬于普通類,所以下面這段代碼的運行結果為true.

類型參數帶來了許多弊端

①、不支持基本類型

②、只有原始類型class

③、不能實例化類型參數

④、不能實例化泛型數組

七、類型的上界

這個地方意味著T必須實現他的上界Comparabe<T>接口
class Alg<T extends Comparable<T>>
{public T findMax(T[] array){T max = array[0];for (int i = 0; i < array.length; i++) {if(max.compareTo(array[i]) < 0){max = array[i];}}return max;}}
public class Test {public static void main(String[] args) {Alg<Integer> alg = new Alg<>();Integer[] array = {1,5,2,7,19,4};Integer max = alg.findMax(array);System.out.println(max);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86902.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86902.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

賦能 Java 工程,飛算科技重新定義智能開發

在數字經濟蓬勃發展的當下&#xff0c;軟件開發行業正經歷著前所未有的變革。飛算科技作為一家自主創新型的數字科技公司&#xff0c;始終以互聯網科技、大數據、人工智能等前沿技術為根基。憑借團隊在相關領域多年積累的深厚實踐經驗&#xff0c;公司深度融合技術與應用&#…

【藍牙】Linux Qt4藍牙設備列表刷新加載采用什么策略,使用什么對應的Linux命令或dbus接口

在 Linux 系統中&#xff0c;使用 Qt4 開發藍牙設備列表刷新功能時&#xff0c;通常會結合 BlueZ 藍牙協議棧 和 D-Bus 通信機制 實現對藍牙設備的發現與管理。以下是常見的實現策略和對應的命令或接口。 &#x1f9e9; 一、藍牙設備列表刷新策略 1. 主動掃描&#xff08;Scan…

產品背景知識——CIFS、SMB 和 Samba

產品背景知識——CIFS、SMB 和 Samba 1. SMB&#xff08;Server Message Block&#xff09; 定義&#xff1a; SMB 是一種網絡協議&#xff0c;用于在計算機之間共享文件、打印機、串口等資源。它由 IBM 在 1980 年代開發&#xff0c;后被微軟采用并擴展。 發展歷程&#xff…

基于Python的GIS-RS多源數據處理(TIF/SHP/NC/...)【20250630】

柵格數據以規則網格(像素)的數值矩陣表達地理現象&#xff0c;每個單元格代表一個屬性值(如高程、溫度)。例如衛星影像、數字高程模型、溫度分布圖。存儲格式包括ENVI DAT、GeoTIFF、JPEG、PNG、ASCII Grid等等。 矢量數據是通過幾何圖形(點、線、面)表示地理實體&#xff0c;…

基于yolov5的深度學習的昆蟲檢測帶QT界面

完整項目查看或想了解其他項目點擊文末名片 項目簡介 本項目旨在開發一個基于深度學習的昆蟲檢測與識別系統。系統使用兩個主要模塊&#xff1a;昆蟲檢測器&#xff08;InsectDetector&#xff09;和昆蟲識別器&#xff08;InsectIdentifier&#xff09;。首先&#xff0c;昆蟲…

linux使用1

1.終端查看ip地址 # windows ipconfig# linux ifconfig2.VMware共享文件夾權限設置下如何復制/移動文件 # 移動: mv # 查看當前文件夾: ls # 設置管理員權限&#xff1a; sudo # 復制&#xff1a; cp#情景一&#xff1a;移動桌面文件夾&#xff08;desktop/day4/server/)到共…

ACE之ACE_NonBlocking_Connect_Handler問題分析

問題 ACE_NonBlocking_Connect_Handler在處理異步時存在問題 分析 當connect選擇的同步參數為ACE_Synch_Options::USE_REACTOR時&#xff0c;連接超時時間為ACE_Time_Value::zero&#xff0c;在同步發起連接返回的錯誤碼為EWOULDBLOCK時&#xff0c;會發起異步連接nonblocki…

『uniapp』i18n 國際化(保姆級圖文)

目錄 預覽效果項目根目錄新建i18n文件夾安裝vue-i18n 指定版本main.js 中引入i18n頁面展示總結歡迎關注 『uniapp』 專欄,持續更新中 歡迎關注 『uniapp』 專欄,持續更新中 預覽效果 中文 英文 項目根目錄新建i18n文件夾 其中各個語言的json文件

P1967 [NOIP 2013 提高組] 貨車運

題目背景 NOIP2013 提高組 D1T3 題目描述 A 國有 n n n 座城市&#xff0c;編號從 1 1 1 到 n n n&#xff0c;城市之間有 m m m 條雙向道路。每一條道路對車輛都有重量限制&#xff0c;簡稱限重。 現在有 q q q 輛貨車在運輸貨物&#xff0c; 司機們想知道每輛車在不…

【軟考高項論文】論信息系統項目的溝通管理

摘要 在信息系統項目的實施進程中&#xff0c;溝通管理的重要性不言而喻。有效的溝通不僅能保證項目信息準確傳遞&#xff0c;還能推動團隊協作&#xff0c;提高項目整體效率。本文結合 2024 年 6 月我所參與的信息系統項目&#xff0c;圍繞項目溝通管理的過程及項目干系人管理…

浪潮和曙光服務器的ipmi配置教程

配置浪潮SA5212M5服務器 1、啟動服務器按DEL按鍵進入服務器bios 2、選擇Server Mgmt菜單中的BMC Network Configuration配置項回車。 3、BMC Network Configuration配置項中的Get BMC Dedicated Parameters選擇Manual&#xff08;手動配置&#xff09; 4、BMC Network Configu…

Golang 標準庫errors用法

Go語言的標準庫中的errors包提供了一些用于創建和操作錯誤的基本功能。下面是對該包的詳細用法說明。 基本用法 創建錯誤 使用errors.New函數創建一個新的錯誤對象。errors.New接受一個字符串參數作為錯誤信息&#xff0c;并返回一個實現了error接口的對象。 package mainimpo…

搭建自己的WEB應用防火墻

搭建自己的WEB應用防火墻 之前給客戶搭建的網站服務近期頻繁遭受惡意掃描、暴力破解攻擊&#xff0c;日志里記錄著各種奇葩的請求地址&#xff0c;導致Tomcat線程資源耗盡&#xff0c;最終nginx報504&#xff08;網關超時&#xff09;&#xff0c;在服務器上curl本地請求依然卡…

MySQL:CRUD操作

目錄 XML模版一、結果返回集二、查詢三、查詢詳情四、新增4.1 不含逗號4.1 含逗號 五、修改5.1 不含逗號5.2 含逗號 六、刪除 XML模版 xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3…

智慧園區綜合管理平臺:提升園區運營效能的核心利器

在數字化浪潮席卷各個領域的當下&#xff0c;智慧園區的建設成為了推動產業升級、提升管理效率和服務質量的關鍵舉措。而綜合管理平臺作為智慧園區的 “大腦”&#xff0c;整合了園區運營的各類功能&#xff0c;為園區管理者和企業提供了全方位的支持。本文將基于一份智慧園區功…

碰一碰發視頻源碼搭建,支持OEM

在數字化生活日益普及的今天&#xff0c;便捷的信息傳輸方式成為用戶的迫切需求。“碰一碰發視頻” 功能憑借其新穎的交互體驗和高效的數據傳輸特性&#xff0c;在社交分享、文件傳輸等場景中備受青睞。本文將深入探討碰一碰發視頻源碼搭建的定制化開發流程&#xff0c;涵蓋核心…

Walrus為數據存儲帶來可編程性

要點總結 Walrus 是下一代去中心化存儲協議&#xff0c;旨在突破傳統中心化云存儲的局限&#xff0c;如高昂成本、單點故障、審查和隱私風險等&#xff0c;同時相較于其他去中心化存儲系統也做出了諸多創新&#xff0c;尤其是在可編程性與性能上的提升。“blob” 即 Binary La…

React:利用計算屬性名特點更新表單值

需求&#xff1a;三個input框&#xff0c;在input框輸入時候&#xff0c;獲取最新值&#xff0c;進行數據更新 思路&#xff1a;name屬性的變量設置的和表單的變量一樣&#xff0c;方便通過name屬性更新值 function TenantManage() {const [formData, setFormData] useState…

【軟考高項論文】論信息系統項目的范圍管理

摘要 在信息系統項目管理里&#xff0c;范圍管理極為關鍵。有效的范圍管理可保障項目按時、按質、按量完成&#xff0c;避免變更帶來的混亂與成本超支。本文結合作者參與的一個 2024 年 3 月啟動的信息系統項目&#xff0c;詳細闡述項目范圍管理的過程&#xff0c;包括范圍規劃…

蓋雅工場 2025 香港 SAP NOW 大會深度解析:AI 重構亞太勞動力管理數字化生態

一、前沿技術亮相&#xff1a;AI 驅動人力資源數字化轉型全景展示 在 6 月 13 日舉辦的 2025 香港 SAP NOW 大會上&#xff0c;亞太勞動力管理領軍企業蓋雅工場&#xff08;GaiaWorks&#xff09;以「AI 勞動力管理」為核心&#xff0c;通過主題演講與沉浸式展臺演示&#xf…