從零開始學java--泛型(1)

泛型

學生成績可能是數字類型,也可能是字符串類型,如何存放可能出現的兩種類型呢:

public class Score {String name;String id;Object value;  //因為Object是所有類型的父類,因此既可以存放Integer也能存放Stringpublic Score(String name,String id,Object value){this.name=name;this.id=id;this.value=value;}
}

以上方法雖然解決了多種類型存儲的問題,但是Object類型在編譯階段并不具有良好的類型判斷能力,很容易出現:

    public static void main(String[] args) {Score score=new Score("數學","aa","優秀"); //是String類型的Integer number=(Integer) score.getValue();//獲取成績需要進行強制類型轉換,雖然并不是一開始的類型,但是編譯不會報錯}

由于是Object類型,所以并不能直接判斷存儲的到底是String還是Integer,取值只能進行強制類型轉換,顯然無法在編譯期確定類型是否安全,項目中代碼量非常大,進行類型比較又會導致額外的開銷和增加代碼量,如果不比較又容易出現類型轉換異常,代碼的健壯性有所欠缺。

為了解決以上問題,JDK5新增了泛型,它能夠在編譯階段檢查類型安全,大大提升開發效率。


泛型類

定義泛型類:

public class Score<T> { //泛型類需要使用<>,在里面添加1-N個類型變量String name;String id;T value;  //T會根據使用時提供的類型自動變成對應類型public Score(String name,String id,T value){  //這里的T可以是任何類型,但是一旦確定就不能修改了this.name=name;this.id=id;this.value=value;}
}
    public static void main(String[] args) {Score<String> score=new Score<>("數學","aa","優秀");//使用時跟上<>并在其中填寫明確要使用的類型}

泛型將數據類型控制在了編譯階段, 在編寫代碼時就能明確泛型的類型,類型不符合將無法編譯通過。

1、因為是具體使用對象時才會明確具體類型,所以說靜態方法中不能用。

2、方法中使用待確定類型的變量時,因為不明確類型則會默認這個變量是一個Object類型的變量(即不能使用String等類型中的方法)。可對其進行強制類型轉換但沒必要。

3、不能通過這個不確定的類型變量直接創建對象和對應的數組。

4、具體類型不同的泛型類變量,不能使用不同的變量進行接收。

5、如果要讓某個變量支持引用確定了任意類型的泛型,可以使用?通配符

    public static void main(String[] args) {Score<String> score=new Score<>("數學","aa","優秀");Score<?>score1=score;}

?如果使用通配符,由于類型不確定,所以說具體類型同樣會變成Object。

6、泛型變量可以定義多個,多個類型變量用,隔開。在使用時需要將這三種類型都進行明確指令。

7、泛型只能確定為一個引用類型,不支持基本類型。

要存放基本數據類型的值,我們只能使用對應的包裝類。

如果是基本類型的數組,因為數組本身是引用類型,所以是可以的。


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

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

相關文章

pdf轉latex

Doc2X&#xff08;https://doc2x.noedgeai.com/&#xff09; Doc2X 是一個由 NoEdgeAI 提供的在線工具&#xff0c;主要用于將 PDF 文件&#xff08;尤其是學術論文、報告等文檔&#xff09;轉換為 LaTeX 格式。LaTeX 是一種高質量排版系統&#xff0c;廣泛應用于學術界和出版…

Visual Studio 2022 UI機器學習訓練模塊

VS你還是太超標了&#xff0c;現在機器學習都不用寫代碼了嗎&#xff01;&#xff01; 右鍵項目解決方案&#xff0c;選擇機器學習模型

無公網實體服務器加裝多個操作系統供多個用戶互不打擾使用_part1

背景介紹 因筆者業務需求&#xff0c;入手了一個實體服務器&#xff0c;但為了避免出現在一個操作系統中搭建編程環境后有許多相關的進程和服務&#xff0c;拖慢日常的使用&#xff0c;也能讓其他人短期使用&#xff0c;更好的利用服務器的性能&#xff0c;讓服務器專注于“什…

運動規劃實戰案例 | 基于四叉樹分解的路徑規劃(附ROS C++/Python仿真)

目錄 1 為什么需要四叉樹&#xff1f;2 基于四叉樹的路徑規劃2.1 分層抽象2.2 路圖搜索2.3 動態剪枝 3 算法仿真3.1 ROS C算法仿真3.2 Python算法仿真 1 為什么需要四叉樹&#xff1f; 路徑規劃的本質是在給定環境中尋找從起點到終點的最優或可行路徑&#xff0c;其核心挑戰在…

docker快捷打包腳本(ai版)

直接進入主題&#xff1a; 用這個腳本前提是你本地可以拉鏡像倉庫的鏡像&#xff0c;并且在 本地有了&#xff0c;然后將所有的鏡像tag寫在一個文件中&#xff0c;和下面docker_tags.txt 對應&#xff0c;文件叫什么&#xff0c;腳本里對應改什么&#xff0c;給小白說的 #!/bi…

WinMerge下載及使用教程(附安裝包)

文章目錄 一、WinMerge安裝步驟1.WinMerge下載&#xff1a;2.解壓&#xff1a;3.啟動&#xff1a; 二、WinMerge使用步驟1.添加文件或文件夾2.查看差異3.格式選擇 WinMerge v2.16.36 是一款免費開源的文件與文件夾比較、合并工具&#xff0c;能幫您快速找出差異&#xff0c;提高…

Jmeter性能測試之生成測試報告

結構 測試計劃 測試計劃是頂級的層級?錄的結構&#xff0c; 那么在這樣的?錄結構中&#xff0c;??可以包含很多線程組 線程組 線程組我們可以簡單的理解為postman測試?具??的collection&#xff0c;那么在整體線程組??&#xff0c;可以添加很多的測試 ?例 簡單控…

CSS中的inline-flex與flex的區別

在CSS中&#xff0c;flex 和 inline-flex 都是用于實現彈性布局&#xff08;Flexbox&#xff09;的顯示屬性&#xff0c;但它們在布局行為上有所不同。 flex 屬性會使元素表現為塊級彈性容器&#xff0c;這意味著元素會在頁面上占據一整行的空間&#xff0c;無論其內部內容的大…

Linux的那些基礎常用命令匯總

目錄 前言&#xff1a; 用戶命令&#xff1a; 管理后臺作業命令&#xff1a; 文件目錄操作命令&#xff1a; 運維高頻使用命令&#xff1a; 磁盤管理以及文件系統命令: 用戶、組操作命令&#xff1a; 權限控制命令&#xff1a; 網絡配置命令&#xff1a; 軟件管理命令…

高效深度學習lecture03

lecture_03 **剪枝&#xff1a;**pruning basically turns a dense neural network into a sparse neural network. you can remove those redundant synapses, and also you can remove those redundant neurons. 剪枝的本質上是將稠密的神經網絡轉變成稀疏的神經網絡&#…

Nextjs15 實戰 - React Notes 項目初始化

current branch 對應如下文檔 redis ioredis 本專欄內容均可在Github&#xff1a;notes_01 找到 一、效果 完整項目使用技術棧&#xff1a; Nextjs15 MySQL Redis Auth Prisma i18n strapi Docker vercel 二、修改根布局和其他頁面 修改 app/page.tsx&#xff1a…

Flutter PopupMenuButton 深度解析:從入門到架構級實戰

在移動應用交互設計中&#xff0c;上下文菜單如同隱形的魔法師&#xff0c;在有限屏幕空間中優雅地擴展操作維度。作為Flutter框架中的核心交互組件&#xff0c;PopupMenuButton絕非簡單的菜單觸發器&#xff0c;其背后蘊含著Material Design的交互哲學、聲明式UI的架構智慧以及…

C++——清明

#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <ctime>using namespace std;class Weapon; // 前置聲明class Hero{ pr…

es --- 集群數據遷移

目錄 1、需求2、工具elasticdump2.1 mac安裝問題解決 2.2 elasticdump文檔 3、遷移 1、需求 遷移部分新集群沒有的索引和數據 2、工具elasticdump Elasticdump 的工作原理是將輸入發送到輸出 。兩者都可以是 elasticsearch URL 或 File 2.1 mac安裝 前置&#xff1a;已經安裝…

鴻蒙開發_ARKTS快速入門_語法說明_組件聲明_組件手冊查看---純血鴻蒙HarmonyOS5.0工作筆記010

然后我們來看如何使用組件 可以看到組件的組成 可以看到我們使用的組件 然后看一下組件的語法.組件中可以使用子組件. 然后組件中可以有參數,來修改組件的樣式等 可以看到{},這種方式可以設置組件參數,當然在下面. 的方式也可以的 然后再來

【GEE學習筆記】報錯解決:Sentinel-2 數據集分為 L1C(大氣頂層)和 L2A(地表反射率),如何選擇波段進行去云處理?

【GEE學習筆記】報錯解決&#xff1a;Sentinel-2 數據集分為 L1C&#xff08;大氣頂層&#xff09;和 L2A&#xff08;地表反射率&#xff09;&#xff0c;如何選擇波段進行去云處理&#xff1f; 【GEE學習筆記】報錯解決&#xff1a;Sentinel-2 數據集分為 L1C&#xff08;大…

OpenVLA-OFT——微調VLA時加快推理的三大關鍵設計:支持動作分塊的并行解碼、連續動作表示以及L1回歸(含輸入靈活化及對指令遵循的加強)

前言 25年3.26日&#xff0c;這是一個值得紀念的日子&#xff0c;這一天&#xff0c;我司「七月在線」的定位正式升級為了&#xff1a;具身智能的場景落地與定制開發商 &#xff0c;后續則從定制開發 逐步過渡到 標準產品化 比如25年q2起&#xff0c;在定制開發之外&#xff0…

IDEA 使用Maven打包時內存溢出

IDEA 使用Maven打包時內存溢出 解決辦法&#xff1a; File -> settings -> Build,Excetion,Deployment-> Compiler 中添加配置“-Djps.track.ap.dependenciesfalse” 如圖&#xff1a;

隨機產生4位隨機碼(java)

Random類&#xff1a; 用于生成隨機數 import java.util.Random; 導入必要的類 generateVerificationCode()方法&#xff1a; 這是一個靜態方法&#xff0c;可以直接通過類名調用 返回一個6位數字的字符串&#xff0c;首位不為0 生成首位數字&#xff1a; random.nextInt…

C#調用C++動態庫時出現`System.DllNotFoundException`錯誤的解決思路

文章目錄 1. DLL文件路徑問題2. 依賴的運行時庫缺失3. 平臺不匹配&#xff08;x86/x64&#xff09;4. 導出函數名稱不匹配5. DLL文件損壞或權限問題6. 運行時庫沖突&#xff08;MT/MD不匹配&#xff09;7. 使用DLLImport時的常見錯誤總結步驟 在C#中調用C動態庫時出現System.Dl…