亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
2。通配符:處理未知類型
無限的通配符(
上界通配符(
較低的通配符(
3。 PECS規(guī)則:生產(chǎn)者extends ,消費(fèi)者super
4。常見的陷阱和技巧
首頁 Java java教程 了解類型安全代碼的Java仿製藥和通配符

了解類型安全代碼的Java仿製藥和通配符

Jul 30, 2025 am 12:27 AM
java 泛型

Java Generic提供編譯時(shí)類型的安全性,並通過允許在類,接口和方法中的類型參數(shù)來消除鑄造,而通配符在使用未知類型時(shí)提高了靈活性; 1。仿製藥啟用可重複使用的類型安全代碼,例如List 或Generic Box ; 2。通配符處理未知類型:對(duì)於任何類型,用於亞型(用於閱讀),用於超級(jí)型(用於寫作); 3。 PECS規(guī)則指南的用法:當(dāng)類型產(chǎn)生數(shù)據(jù)(生產(chǎn)者),消耗數(shù)據(jù)(消費(fèi)者)時(shí),使用擴(kuò)展,如Collections.Copy.Copy(dest ,src ); 4。避免原始類型,不要不必要地使用返回類型的通配符,請(qǐng)利用有限類型的參數(shù)(例如>),並記住類型的擦除限制運(yùn)行時(shí)使用 - 適當(dāng)使用通用和通配符可改善代碼安全性,清晰度和可重複性。

了解類型安全代碼的Java仿製藥和通配符

Java Generics和通配符是實(shí)現(xiàn)類型安全編程,減少運(yùn)行時(shí)錯(cuò)誤並改善代碼可讀性的強(qiáng)大功能。在Java 5中引入的仿製藥允許您定義具有類型參數(shù)的類,接口和方法,因此相同的代碼可以與不同類型一起使用,同時(shí)在編譯時(shí)捕獲類型不匹配。通配符通過讓您使用未知或有限類型的方式來擴(kuò)展這種靈活性。

了解類型安全代碼的Java仿製藥和通配符

這是有效理解和使用它們的方法。


1。什麼是仿製藥?

仿製藥可讓您抽像類型。例如,您可以使用List<string></string>來確保僅添加字符串,而不是使用List (例如list)之類的原始類型。

了解類型安全代碼的Java仿製藥和通配符
 List <string> names = new ArrayList <>();
names.Add(“ Alice”);
// names.add(123); //編譯錯(cuò)誤 - 鍵入安全!

沒有仿製藥,您必須在運(yùn)行時(shí)施放對(duì)象和風(fēng)險(xiǎn)ClassCastException 。

關(guān)鍵好處:

了解類型安全代碼的Java仿製藥和通配符
  • 編譯時(shí)類型檢查
  • 消除明確的鑄造
  • 跨不同類型的代碼重複使用

您還可以定義自己的通用類和方法:

公共班級(jí)框<t> {
    私人t值;

    public void set(t value){this.value = value; }
    public t get(){返回值; }
}

現(xiàn)在, Box<String> , Box<Integer>等都是類型安全。


2。通配符:處理未知類型

有時(shí),當(dāng)不知道確切類型的參數(shù)時(shí),您需要使用通用類型。那是通配符( ? )進(jìn)來的地方。

無限的通配符( <?>

當(dāng)您不關(guān)心類型時(shí)使用,通常用於收藏中的閱讀。

 public void printsize(list <?> list){
    system.out.println(“ size:” list.size());
}

您不能添加元素(除非null ),因?yàn)閷?shí)際類型未知。

上界通配符( <? extends T>

當(dāng)您想接受類型及其子類型時(shí)使用。在僅閱讀操作中常見。

 public double sum(list <?擴(kuò)展數(shù)字>數(shù)字){
    return numbers.stream()。 maptodouble(number :: DoubleValue).sum();
}

現(xiàn)在,您可以通過List<Integer> , List<Double> ,等等。

但是,同樣,您不能添加任何內(nèi)容( null除外) - 因?yàn)榫幾g器不知道確切的類型。

較低的通配符( <? super T>

當(dāng)您想接受類型及其超級(jí)型時(shí)使用。對(duì)寫操作有用。

 public void addnumbers(list <?super Integer> list){
    list.add(1);
    list.Add(2);
}

這與List<Integer> , List<Number>List<Object>一起使用。

但是您無法安全地讀取Integer - 元素可能只是Object


3。 PECS規(guī)則:生產(chǎn)者extends ,消費(fèi)者super

有效的Java書中有用的助記符:

PECS :生產(chǎn)者 - extends ,消費(fèi)者 - super

  • 如果參數(shù)化對(duì)象會(huì)產(chǎn)生t(從中讀取t),請(qǐng)使用<? extends T> 。
  • 如果它消耗t(將t寫入其中),請(qǐng)使用<? super T> 。

例如,在Collections.copy()中:

 public static <t> void copy(list <?super t> dest,list <?擴(kuò)展t> src)
  • src生產(chǎn)者? extends T
  • dest消費(fèi)者? super T

應(yīng)用PEC設(shè)計(jì)靈活且安全的API。


4。常見的陷阱和技巧

  • 除非有必要,否則不要在返回類型中使用通配符- 它迫使呼叫者處理未知類型。

  • 原始類型很危險(xiǎn)- 避免List而不是List<String> 。

  • 通用方法可以推斷類型:

     public <t> void print(t item){...}
  • 類型擦除意味著僅在編譯時(shí)執(zhí)行仿製藥。沒有運(yùn)行時(shí)信息(例如,您不能進(jìn)行new T[]() )。

  • 有限類型的參數(shù)可以約束通用:

     public <t擴(kuò)展可比<t >> t max(t a,t b){
        返回A.compareto(b)> 0? A:B;
    }

    使用仿製藥和通配符正確導(dǎo)致更清潔,更安全的代碼。了解何時(shí)使用extends , super或特定類型 - 並記住PEC。這不僅僅是避免演員;這是關(guān)於表達(dá)意圖並儘早捕獲錯(cuò)誤。

    基本上,仿製藥為您提供編譯時(shí)的安全性,通配符為您提供跨類型層次結(jié)構(gòu)的代碼的靈活性,而不會(huì)犧牲這種安全性。

    以上是了解類型安全代碼的Java仿製藥和通配符的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

用雅加達(dá)EE在Java建立靜止的API 用雅加達(dá)EE在Java建立靜止的API Jul 30, 2025 am 03:05 AM

SetupaMaven/GradleprojectwithJAX-RSdependencieslikeJersey;2.CreateaRESTresourceusingannotationssuchas@Pathand@GET;3.ConfiguretheapplicationviaApplicationsubclassorweb.xml;4.AddJacksonforJSONbindingbyincludingjersey-media-json-jackson;5.DeploytoaJakar

Java項(xiàng)目管理Maven的開發(fā)人員指南 Java項(xiàng)目管理Maven的開發(fā)人員指南 Jul 30, 2025 am 02:41 AM

Maven是Java項(xiàng)目管理和構(gòu)建的標(biāo)準(zhǔn)工具,答案在於它通過pom.xml實(shí)現(xiàn)項(xiàng)目結(jié)構(gòu)標(biāo)準(zhǔn)化、依賴管理、構(gòu)建生命週期自動(dòng)化和插件擴(kuò)展;1.使用pom.xml定義groupId、artifactId、version和dependencies;2.掌握核心命令如mvnclean、compile、test、package、install和deploy;3.利用dependencyManagement和exclusions管理依賴版本與衝突;4.通過多模塊項(xiàng)目結(jié)構(gòu)組織大型應(yīng)用並由父POM統(tǒng)一管理;5.配

CSS暗模式切換示例 CSS暗模式切換示例 Jul 30, 2025 am 05:28 AM

首先通過JavaScript獲取用戶系統(tǒng)偏好和本地存儲(chǔ)的主題設(shè)置,初始化頁面主題;1.HTML結(jié)構(gòu)包含一個(gè)按鈕用於觸發(fā)主題切換;2.CSS使用:root定義亮色主題變量,.dark-mode類定義暗色主題變量,並通過var()應(yīng)用這些變量;3.JavaScript檢測(cè)prefers-color-scheme並讀取localStorage決定初始主題;4.點(diǎn)擊按鈕時(shí)切換html元素上的dark-mode類,並將當(dāng)前狀態(tài)保存至localStorage;5.所有顏色變化均帶有0.3秒過渡動(dòng)畫,提升用戶

CSS下拉菜單示例 CSS下拉菜單示例 Jul 30, 2025 am 05:36 AM

是的,一個(gè)常見的CSS下拉菜單可以通過純HTML和CSS實(shí)現(xiàn),無需JavaScript。 1.使用嵌套的ul和li構(gòu)建菜單結(jié)構(gòu);2.通過:hover偽類控制下拉內(nèi)容的顯示與隱藏;3.父級(jí)li設(shè)置position:relative,子菜單使用position:absolute進(jìn)行定位;4.子菜單默認(rèn)display:none,懸停時(shí)變?yōu)閐isplay:block;5.可通過嵌套實(shí)現(xiàn)多級(jí)下拉,結(jié)合transition添加淡入動(dòng)畫,配合媒體查詢適配移動(dòng)端,整個(gè)方案簡(jiǎn)潔且無需JavaScript支持,適合大

Python物業(yè)裝飾示例 Python物業(yè)裝飾示例 Jul 30, 2025 am 02:17 AM

@property裝飾器用於將方法轉(zhuǎn)為屬性,實(shí)現(xiàn)屬性的讀取、設(shè)置和刪除控制。 1.基本用法:通過@property定義只讀屬性,如area根據(jù)radius計(jì)算並直接訪問;2.進(jìn)階用法:使用@name.setter和@name.deleter實(shí)現(xiàn)屬性的賦值驗(yàn)證與刪除操作;3.實(shí)際應(yīng)用:在setter中進(jìn)行數(shù)據(jù)驗(yàn)證,如BankAccount確保餘額非負(fù);4.命名規(guī)範(fàn):內(nèi)部變量用_前綴,property方法名與屬性一致,通過property統(tǒng)一訪問控制,提升代碼安全性和可維護(hù)性。

如何將Java MistageDigest用於哈希(MD5,SHA-256)? 如何將Java MistageDigest用於哈希(MD5,SHA-256)? Jul 30, 2025 am 02:58 AM

要使用Java生成哈希值,可通過MessageDigest類實(shí)現(xiàn)。 1.獲取指定算法的實(shí)例,如MD5或SHA-256;2.調(diào)用.update()方法傳入待加密數(shù)據(jù);3.調(diào)用.digest()方法獲取哈希字節(jié)數(shù)組;4.將字節(jié)數(shù)組轉(zhuǎn)換為十六進(jìn)製字符串以便讀?。粚?duì)於大文件等輸入,應(yīng)分塊讀取並多次調(diào)用.update();推薦使用SHA-256而非MD5或SHA-1以確保安全性。

Python Parse Date String示例 Python Parse Date String示例 Jul 30, 2025 am 03:32 AM

使用datetime.strptime()可將日期字符串轉(zhuǎn)換為datetime對(duì)象,1.基本用法:通過"%Y-%m-%d"解析"2023-10-05"為datetime對(duì)象;2.支持多種格式如"%m/%d/%Y"解析美式日期、"%d/%m/%Y"解析英式日期、"%b%d,%Y%I:%M%p"解析帶AM/PM的時(shí)間;3.可用dateutil.parser.parse()自動(dòng)推斷未知格式;4.使用.d

崇高文本自動(dòng)關(guān)閉HTML標(biāo)籤 崇高文本自動(dòng)關(guān)閉HTML標(biāo)籤 Jul 30, 2025 am 02:41 AM

安裝Emmet插件可實(shí)現(xiàn)智能自動(dòng)閉合標(biāo)籤並支持縮寫語法;2.啟用"auto_match_enabled":true讓Sublime自動(dòng)補(bǔ)全簡(jiǎn)單標(biāo)籤;3.使用Alt .(Win)或Ctrl Shift .(Mac)快捷鍵手動(dòng)閉合當(dāng)前標(biāo)籤——推薦日常使用Emmet,輕量需求可用後兩種方式組合,效率足夠且設(shè)置簡(jiǎn)單。

See all articles