Java泛型簡介

Java泛型簡介

????????Java泛型是在Java 5中引入的一個特性,它允許程序員在編譯時指定類、接口或方法能夠接受的類型。泛型的主要目的是提供編譯時類型安全檢查,避免在運行時因為類型轉換錯誤而導致的ClassCastException

????????在沒有泛型之前,Java中的集合類(如ListSet等)都是類型不安全的。這意味著你可以將任何類型的對象放入集合中,這在運行時可能會導致類型轉換錯誤。泛型的引入使得我們可以創建類型安全的集合。

泛型的好處

  1. 類型安全:泛型提供了編譯時類型檢查,減少了運行時類型轉換錯誤。
  2. 代碼重用:泛型使得我們可以編寫更通用的代碼,適用于不同的數據類型。
  3. 性能提升:泛型避免了類型轉換,減少了運行時的開銷。

泛型的基本語法

????????泛型的基本語法如下:

public class ClassName<T> { // T 是一個類型參數,可以是任何類型 T data; public ClassName(T data) { this.data = data; } public T getData() { return data; } public void setData(T data) { this.data = data; } }

在這個例子中,T是一個類型參數,它可以在創建ClassName對象時被任何類型所替代。

使用泛型

????????使用泛型非常簡單,只需要在聲明變量或創建對象時指定具體的類型即可:

ClassName<String> stringHolder = new ClassName<>("Hello World"); ClassName<Integer> intHolder = new ClassName<>(42);

泛型方法

????????泛型也可以用于方法。在方法聲明中,你可以指定類型參數:

public class Util { public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } 
}

這個printArray方法可以接受任何類型的數組,并打印出數組中的所有元素。

泛型的類型推斷

????????Java編譯器可以根據上下文推斷出泛型的具體類型,這稱為類型推斷。例如:

List<String> list = new ArrayList<>(); 
list.add("Hello"); 
list.add("World");

在這個例子中,即使我們沒有顯式指定泛型類型,編譯器也能推斷出list是一個List<String>類型。

泛型的邊界

????????泛型類型參數可以有邊界,這限制了可以作為類型參數的類型。邊界通常使用extends關鍵字指定:


public class Animal { // ... } 
public class Dog extends Animal { // ... } public class ClassName<T extends Animal> { T data; public ClassName(T data) { this.data = data; } public T getData() { return data; } public void setData(T data) { this.data = data; } 
}

在這個例子中,T必須是一個Animal的子類。這意味著你可以創建ClassName<Dog>ClassName<Animal>,但不能創建ClassName<String>

泛型的通配符

泛型還可以使用通配符來表示未知的類型。通配符有兩種:無界通配符(?)和有界通配符(? extends T? super T)。

無界通配符用于不需要知道具體類型的場合:

public static void printList(List<?> list) {for (Object element : list) { System.out.print(element + " "); } System.out.println(); 
}

有界通配符用于需要知道類型的上下界的場合:

public static <T> void printListUpper(List<? extends T> list) { // 只能使用T或T的子類 } public static <T> void printListLower(List<? super T> list) { // 只能使用T或T的父類 }

泛型的類型擦除

????????Java泛型在編譯時是存在的,但在運行時會被擦除。這意味著泛型類型信息在運行時是不可見的。為了解決這個問題,Java提供了一些機制,如泛型簽名的保留。

結論

????????Java泛型是一個強大的特性,它提高了代碼的類型安全性和重用性。通過泛型,我們可以編寫更通用、更靈活的代碼。雖然泛型在運行時會被擦除,但Java提供了足夠的機制來確保泛型代碼的正確性和效率。

????????請注意,這個解釋是一個簡化的版本,旨在為初學者提供一個泛型的基本概念。在實際應用中,泛型可能會涉及更復雜的概念,如泛型數組、泛型方法的重載、泛型與繼承等。如果您需要更深入的理解,建議查閱Java官方文檔或相關書籍。

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

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

相關文章

如何利用動態靜態代理IP實現跨地域網絡營銷與市場研究

動態代理IP和靜態代理IP都可以在跨地域網絡營銷與市場研究中發揮關鍵作用&#xff0c;具體實現方式如下&#xff1a; ### 動態代理IP的應用&#xff1a; 1. 跨地域營銷活動測試&#xff1a; - 在進行網絡營銷時&#xff0c;尤其是要驗證廣告投放、SEO效果或A/B測試不同地區用戶…

Ubuntu系統使用Docker搭建Jupyter Notebook并實現無公網ip遠程連接

文章目錄 1. 選擇與拉取鏡像2. 創建容器3. 訪問Jupyter工作臺4. 遠程訪問Jupyter工作臺4.1 內網穿透工具安裝4.2 創建遠程連接公網地址4.3 使用固定二級子域名地址遠程訪問 本文主要介紹如何在Ubuntu系統中使用Docker本地部署Jupyter Notebook&#xff0c;并結合cpolar內網穿透…

C語言系列(所需基礎:大學C語言及格)-4-轉義字符/注釋/選擇語句

文章目錄 一、轉義字符二、注釋三、選擇語句 一、轉義字符 加上\會講原來的字符改變意思&#xff0c;即進行轉義 例如\t會使t變成\t用于表示轉義字符&#xff0c;使得t轉義成水平制表符 其他轉義字符&#xff1a; 三字母詞&#xff08;展示\&#xff1f;的用處&#xff09;…

C#面:接口是一種引用類型,不可以聲明公有的域或私有的成員變量,但是可以聲明什么呢?

可以聲明&#xff1a;方法&#xff0c;屬性&#xff0c;索引器&#xff0c;事件。 接口的主要作用是定義一套規范&#xff0c;使得不同的類可以按照相同的規范進行交互。通過實現接口&#xff0c;類可以具備多態性&#xff0c;即可以以接口類型來引用對象&#xff0c;并調用接…

k8s-001-Centos7內核升級

1. 查看內核 [rootlocalhost ~]# uname -a 2. 執行的命令(安裝最新版內核): 下載: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 安裝: rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm &#xff08; 查看最新版內核&…

杭州默安-安全技術實習生-一面

1.自我介紹 略 2.專業主修的課程 略 3.xss漏洞的類型&#xff0c;原理及防御 原理&#xff0c;服務器對用戶的輸入過濾不嚴格&#xff0c;將用戶的輸入當作Javascript代碼執行并返回給客戶端。 防御&#xff0c;輸入和url參數過濾&#xff0c;HTML實體編碼轉義特殊字符。…

力扣hot100題解(python版33-35題)

33、排序鏈表 給你鏈表的頭結點 head &#xff0c;請將其按 升序 排列并返回 排序后的鏈表 。 示例 1&#xff1a; 輸入&#xff1a;head [4,2,1,3] 輸出&#xff1a;[1,2,3,4]示例 2&#xff1a; 輸入&#xff1a;head [-1,5,3,4,0] 輸出&#xff1a;[-1,0,3,4,5]示例 3&a…

kafka架構詳解

文章目錄 概述kafaka架構Kafka的設計時什么樣的Zookeeper 在 Kafka 中的作用知道 概述 Apache Kafka 是分布式發布 - 訂閱消息系統&#xff0c;在 kafka 官網上對 kafka 的定義&#xff1a;一個分布式發布 - 訂閱消息傳遞系統。 Kafka 最初由 LinkedIn 公司開發&#xff0c;Li…

mysql 中 auto_increment 自增約束的用法和配置

自增約束 int字段 特殊約束條件&#xff0c;用于為表中寫入新的記錄生成唯一的值&#xff0c;一個表中只能有一個自增約束字段 格式 字段 數據類型 auto_increment 創建帶有自增約束的表 create table student_game_auto ( id int unique auto_increment, name char(5),…

螞蟻集團推動編制的全球首個隱私計算一體機國際標準發布

近日&#xff0c;IEEE 標準協會&#xff08;IEEE-SA&#xff09;正式發布并推行了由我國企業主導的全球首個隱私計算一體機國際標準《隱私計算一體機技術要求》&#xff08;IEEE 3156-2023&#xff09;。IEEE-SA是權威國際標準制定機構&#xff0c;該標準的成功發布意味著中國的…

numpy常見操作

返回各維度元組print(img.shape)返回大小img.size返回各維度數據類型print(img.dtype) 數據類型變int8maskmask.astype(np.int8) 注意int32可變float64 但float64變int32會把小數截斷 string_可變float64 NumPy常見操作&#xff1a; import numpy as np 創建一個一維數組 ar…

繼承-學習2

this關鍵字&#xff1a;指向調用該方法的對象&#xff0c;一般我們是在當前類中使用this關鍵字&#xff0c;所以我們常說代表本類對象的引用 super關鍵字&#xff1a;代表父類存儲空間的標識(可看作父類對象的引用) 父類&#xff1a; package ven;public class Fu {//父類成員…

操作系統面經

1. 進程和線程的區別&#xff1f; 調度&#xff1a;進程是資源管理的基本單位&#xff0c;線程是程序執行的基本單位。切換&#xff1a;線程上下文切換比進程上下文切換要快得多。擁有資源&#xff1a; 進程是擁有資源的一個獨立單位&#xff0c;線程不擁有系統資源&#xff0…

unity自定義著色器基礎

這些內置渲染管線的著色器示例演示了編寫自定義著色器的基礎知識&#xff0c;并涵蓋了常見的用例。 有關編寫著色器的信息&#xff0c;請參閱編寫著色器。 設置場景 第一步是創建一些用于測試著色器的對象。在主菜單中選擇 Game Object > 3D Object > Capsule。然后&a…

高光譜遙感學習入門丨高光譜數據處理基礎、Python和Matlab高光譜遙感數據處理

目錄 ①Python高光譜遙感數據處理與高光譜遙感機器學習方法深度應用 ②Matlab高光譜遙感、數據處理與混合像元分解實踐技術應用 ③高光譜遙感數值建模技術及在植被、水體、土壤信息提取領域應用 更多應用 高光譜遙感信息對于我們認識世界具有重要意義。盡管大部分物質在人眼…

記錄 | docker權限原因導致service ssh start失敗

【報錯】 容器內啟 ssh server 報錯 有兩個錯&#xff1a; &#xff08;1&#xff09;/etc/ssh/sshd_host_rsa_key 權限太高&#xff1b; &#xff08;2&#xff09;/run/sshd用戶組不為 root 解決方法&#xff1a; 方法一&#xff1a; 各自容器內對/etc/ssh/sshd_host_r…

【前端素材】推薦優質后臺管理系統 Adminity平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理網站、應用程序或系統的管理界面&#xff0c;通常由管理員和工作人員使用。它提供了訪問和控制網站或應用程序后臺功能的工具和界面&#xff0c;使其能夠管理用戶、內容、數據和其他各種功能。 2、功能需求 后臺管理系…

2024年四川媒體新聞發布渠道,媒體邀約資源表

傳媒如春雨&#xff0c;潤物細無聲&#xff0c;大家好&#xff0c;我是51媒體網胡老師。 四川有哪些媒體新聞發布渠道&#xff0c;媒體邀約資源表&#xff1f; 2024年四川媒體新聞發布渠道&#xff0c;媒體邀約資源表 四川本地媒體&#xff1a;如四川日報、華西都市報、成都商…

【論文閱讀-PRIVGUARD】Day4:3節

3 PRIVANALYZER&#xff1a;強制執行隱私政策的靜態分析 本節介紹PRIVANALYZER&#xff0c;這是一個用于強制執行由PRIVGUARD追蹤的隱私政策的靜態分析器**。我們首先回顧LEGALEASE政策語言&#xff0c;我們使用它來正式編碼政策&#xff0c;然后描述如何靜態地強制執行它們**…

<專利>機器人3D視覺快速定位抓取方法及系統

摘要&#xff0c;此專利無可用的關鍵技術信息&#xff0c;基本都是下面幾句話反復說。。。 本發明提供了一種機器人3D快速定位抓取方法及系統&#xff0c; 包括&#xff1a; 通過高速的3D結構光成像對目標物體的表面輪廓進行掃描&#xff0c; 形成點云數據&#xff1b;對所述點…