泛型基礎及深入

泛型深入

泛型定義:

? ? ? ? JDK5引入的特性,可以在編譯階段約束操作的數據類型,并進行檢查

泛型格式:

? ? ? ? <數據類型>

? ? ? ? 注意:泛型只能支持引用數據類型

優勢:

? ? ? ? 統一數據類型;

? ? ? ? 把運行時期的問題提前到了編譯期間,避免了強制類型轉換可能出現的異常,因為在編譯階段類型就能確定下來。

Java中的泛型是偽泛型:在編譯階段會檢查是否符合要求的數據類型,但是在運行期間又是Object類型(泛型的擦除)

細節:

? ? ? ? 泛型中不能寫基本數據類型;

? ? ? ? 指定泛型的具體類型之后,傳遞數據時,可以傳入該類類型或者子類類型;

? ? ? ? 如果不寫泛型,類型默認是Object;

泛型類:

? ? ? ? 使用場景:

? ? ? ? ? ? ? ? 當一個類中,某個變量的數據類型不確定時,就可以定義帶有泛型的類

????????????????

public class ArrayList<E>{}

? ? ? ? ????????此處的E可以理解為變量,但是不是用來記錄數據的,而是記錄數據的類型 。

? ? ? ? 定義泛型類:

????????

package com.lazyGirl.nenericsdemo;import java.util.Arrays;public class MyArrayList <E>{Object[] objs = new Object[10];int size = 0;public boolean add(E e){objs[size] = e;size += 1;return true;}public E get(int index){return (E )objs[index];}@Overridepublic String toString(){return Arrays.toString(objs);}
}

????????測試:?

????????

public class GenericTest {public static void main(String[] args) {MyArrayList<String> mal = new MyArrayList<>();mal.add("A");mal.add("B");System.out.println(mal.get(0));System.out.println(mal.toString());MyArrayList<Integer> mal1 = new MyArrayList<>();mal1.add(1);mal1.add(2);mal1.add(3);System.out.println(mal1.get(0));System.out.println(mal1.toString());}
}

? ? ? ? 輸出:

????????

?泛型方法:

? ? ? ? ?方法中形參類型不確定時,可以使用類名后面定義的泛型<E>(所有方法都能使用);也可以在方法聲明上定義自己的泛型(只有本方法能用)

? ? ? ? 格式:

public <T> void show(T t){}

? ? ? ? 此處T可以理解為變量,用來記錄類型

????????

package com.lazyGirl.nenericsdemo;import java.util.ArrayList;public class ListUtils {private ListUtils() {}public static<E> void addAll(ArrayList<E> list,E...e){for (E e1 : e) {list.add(e1);}}
}

????????測試:

import java.util.ArrayList;public class ListUtilsTest {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();ListUtils.addAll(list,"A","B","C","D");System.out.println(list);}
}

? ? ? ? 輸出:

?????????

泛型接口:?

?格式:

public interface List<E>{}

如何使用:

? ? ? ? ?方式1:實現類給出具體類型

? ? ? ? 方式2:實現類延續泛型,創建對象時再確定

????????

package com.lazyGirl.nenericsdemo;import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;public class MyArrayList2 implements List<String> {@Overridepublic int size() {return 0;}@Overridepublic boolean isEmpty() {return false;}@Overridepublic boolean contains(Object o) {return false;}//.....
}

泛型 不具備繼承性,但是數據具備繼承性

import java.util.ArrayList;public class GenericDemo2 {public static void main(String[] args) {ArrayList<Ye> list1 = new ArrayList<>();ArrayList<Fu> list2 = new ArrayList<>();ArrayList<Zi> list3 = new ArrayList<>();method(list1);list1.add(new Ye());list1.add(new Fu());list1.add(new Zi());}public static void method(ArrayList<Ye> list){}
}class Ye{}class Fu extends Ye{}class Zi extends Fu{}

? ? ? ? 或者:

import java.util.ArrayList;public class GenericDemo3 {public static void main(String[] args) {ArrayList<Ye> list1 = new ArrayList<>();ArrayList<Fu> list2 = new ArrayList<>();ArrayList<Zi> list3 = new ArrayList<>();method(list1);method(list2);method(list3);}public static<E> void method(ArrayList<E> list){}
}

泛型的通配符:??

??extends E:表示可以傳遞E或者E的所有子類類型

? super E: 可以傳遞E或者E所有的父類類型

? ? ? ? 應用場景:

?????????1. 定義類,方法,接口的時候,類型不確定,就可以定義泛型類,泛型方法,泛型接口

? ? ? ? ?2。 如果類型不確定,但是能知道以后只能傳遞某個繼承體系中的,就可以使用泛型的通配符

? ? ? ? 關鍵點:可以限定類型的范圍

?

?

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

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

相關文章

Linux中 .PHONY 和 all 在 Makefile 中的作用

1 .PHONY 和 all .PHONY 是 GNU make 工具中的一個特殊指令&#xff0c;用于指示某個目標是一個偽目標。偽目標并不對應于實際的文件&#xff0c;而是用來執行一系列命令的標識符。使用 .PHONY 的好處包括避免與現有文件同名造成的沖突&#xff0c;以及提高 make 的執行效率&am…

快速排序(Quick Sort)(C語言) 超詳細解析!!!

生活的本質是什么呢? 無非就是你要什么就不給你什么. 而生活的智慧是什么呢? 是給你什么就用好什么. ---馬斯克 索引 一. 前言二. 快速排序的概念三. 快速排序的實現1. hoare2. 挖坑法3. 前后指針法 總結 正文開始 一. 前言 接上文, 前面我們了解了插入排序, 與優化版本希爾…

ROS IMU慣性測量單元消息包

ROS IMU慣性測量單元消息包 IMU工作原理與作用 IMU&#xff08;Inertial Measurement Unit&#xff0c;慣性測量單元&#xff09;是一種重要的傳感器&#xff0c;用于測量和報告一個物體的特定物理量&#xff0c;包括加速度、角速度和&#xff08;在某些情況下&#xff09;磁…

100道面試必會算法-31-字母異位詞分組

100道面試必會算法-31-字母異位詞分組 給你一個字符串數組&#xff0c;請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。 示例 1: 輸入: strs ["eat", "tea", "tan"…

HQL面試題練習 —— 向用戶推薦好友喜歡的音樂

目錄 1 題目2 建表語句3 題解 題目來源&#xff1a;騰訊。 1 題目 現有三張表分別為&#xff1a; 用戶關注表 t_follow(user_id,follower_id)記錄用戶ID及其關注的人ID&#xff0c;請給用戶1 推薦他關注的用戶喜歡的音樂名稱 ------------------------ | user_id | follower…

六月可以閉眼入的寵物空氣凈化器:希喂、安德邁、霍尼韋爾真實PK

俗話說得好&#xff0c;貓咪一年到頭都在掉毛&#xff0c;仿佛它們是四季常在的"蒲公英"&#xff0c;隨時隨地都在播撒毛發。貓毛不僅遍布它們自己的身體&#xff0c;還可能飄到你的床鋪、沙發、衣物上……面對這樣的狀況&#xff0c;既要應對無處不在的貓毛&#xf…

基于卷積神經網絡(CNN)的垃圾分類模型研究

摘要&#xff1a; 隨著城市化進程的加快&#xff0c;垃圾問題日益嚴重。傳統的垃圾分類方法存在效率低下、準確率不高等問題。本文提出了一種基于卷積神經網絡&#xff08;CNN&#xff09;的垃圾分類模型&#xff0c;該模型能夠自動識別并分類不同類型的垃圾。實驗表明&#xf…

Kruskal算法求最小生成樹

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define MAX 100 #define NO INT_MAX//NO表示沒有邊&#xff0c;相當于INFtypedef struct Graph {int arcnum;int vexnum;char vextex[MAX][20];int martrix[MAX][MA…

什么無線領夾麥克風音質最好?領夾麥克風品牌排行榜前十名推薦

?在當今的數字化浪潮中&#xff0c;個人聲音的傳播和記錄變得尤為重要。無論是會議中心、教室講臺還是戶外探險&#xff0c;無線領夾麥克風以其卓越的便攜性和連接穩定性&#xff0c;成為了人們溝通和表達的首選工具。面對市場上琳瑯滿目的無線麥克風選擇&#xff0c;為了幫助…

【Python】使用 SQLObject orm 庫快速將接口數據存入數據庫

使用 SQLObject orm 庫快速將接口數據存入數據庫 文章目錄 使用 SQLObject orm 庫快速將接口數據存入數據庫背景orm python 版本都有哪些&#xff1f; SQLObject 簡單的使用 背景 因為測試需要&#xff0c;要將百萬條數據接口查詢數據存入數據庫中&#xff0c;為了減少 mysql …

Doris insert into 插入語句執行成功,且select查詢成功,返回結果不報錯,但查不到該插入數據

問題&#xff1a;Doris insert into 正常執行成功&#xff0c;select 查詢也執行成功&#xff0c;但查不到該寫入數據 原因&#xff1a;由于有其他 insert commit 事務待提交且該任務處于鎖的狀態&#xff0c;導致不斷在回滾&#xff0c;進而造成其他的insert into 語句也執行成…

26 - 超過5名學生的課(高頻 SQL 50 題基礎版)

26 - 超過5名學生的課 select class fromCourses group byclass havingcount(*)>5;

Seed-TTS語音編輯有多強?對比實測結果讓你驚嘆!

GLM-4-9B 開源系列模型 前言 就在最近&#xff0c;ByteDance的研究人員最近推出了一系列名為Seed-TTS的大規模自回歸文本轉語音(TTS)模型,能夠合成幾乎與人類語音無法區分的高質量語音。那么Seed-TTS的表現究竟有多強呢?讓我們一起來感受下Seed-TTS帶來的驚喜吧! 介紹Seed-TTS…

Java并發包中的鎖升級

在Java中&#xff0c;特別是ReentrantLock和synchronized關鍵字的實現中&#xff0c;鎖的升級通常涉及到從無鎖狀態到偏向鎖、再升級到輕量級鎖&#xff0c;最后可能升級到重量級鎖的過程。這一系列過程是為了減少鎖帶來的開銷&#xff0c;提高并發效率。 偏向鎖&#xff08;Bi…

如何用手寫代碼實現JavaScript中的reduce函數?

在JavaScript中&#xff0c;Array.prototype.reduce() 是一個內置方法&#xff0c;它遍歷數組中的每個元素&#xff0c;并將它們累積成一個單一的返回值。我們可以自己編寫一個類似的函數來模擬這個過程。 下面是一個簡單的手寫實現例子&#xff1a; function myReduce(arr, …

組裝服務器重裝linux系統【idrac集成戴爾遠程控制卡】

&#x1f341;博主簡介&#xff1a; &#x1f3c5;云計算領域優質創作者 &#x1f3c5;2022年CSDN新星計劃python賽道第一名 &#x1f3c5;2022年CSDN原力計劃優質作者 &#x1f3c5;阿里云ACE認證高級工程師 &#x1f3c5;阿里云開發者社區專…

Vue 跨平臺性能優化十法

Vue.js 開發能夠同時運行在不同平臺&#xff08;如 Web、移動平臺和桌面平臺&#xff09;的應用程序。以下是一些常見的跨平臺解決方案&#xff1a; 1. 使用 Vue.js 官方發布的框架&#xff1a; Vue.js&#xff1a;主要用于 Web 開發。 Vue Native&#xff1a;使用 Vue 語法開…

數據結構 | 超詳細講解七大排序(C語言實現,含動圖,多方法!)

目錄 ?編輯 排序的概念 常見排序算法 ?編輯 1.冒泡排序 &#x1f379;圖解 &#x1f973;代碼實現 &#x1f914;時間復雜度 2.插入排序 &#x1f379;圖解 &#x1f334;深度剖析 &#x1f34e;代碼思路 &#x1f973;代碼實現 &#x1f914;時間復雜度 3.希爾…

2024 年適用于 Linux 的 5 個微軟 Word 替代品

對于那些最近由于隱私問題或其他原因而轉向 Linux 的用戶來說&#xff0c;可能很難替換他們最喜歡的、不在 Linux 操作系統上運行的應用程序。 尋找流行程序的合適替代品可能會成為一項挑戰&#xff0c;而且并不是每個人都準備好花費大量時間來嘗試弄清楚什么可以與他們在 Win…

讀書筆記|《把自己變成稀缺資產》:我們都擁有100分的欲望,卻只有1分的耐心。

哈嘍&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 最近在讀一本書《把自己變成稀缺資產》&#xff0c;其中一章講到耐心的重要性&#xff0c;很有共鳴。 當今社會&#xff0c;生活節奏越來越快&#xff0c;我們都在急于求成的追求結果&#xff0c;對過程越來越缺乏耐…