国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java泛型:靈活多變的類型參數(shù)化工具

這篇具有很好參考價值的文章主要介紹了Java泛型:靈活多變的類型參數(shù)化工具。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Java泛型:靈活多變的類型參數(shù)化工具,趣學Java,java,泛型

  • ??專欄內容:Java
  • ?個人主頁:子夜的星的主頁
  • ??座右銘:前路未遠,步履不停


一、泛型

1、什么是泛型

在傳統(tǒng)的編程方法中,類和方法通常被限定為使用特定的類型。這些類型可能是基礎的數(shù)據(jù)類型(如整數(shù)、字符等),或者是由程序員自己定義的復雜類型。這種方式在處理單一類型數(shù)據(jù)時很有效,但當我們需要編寫更加靈活、能夠適用于多種數(shù)據(jù)類型的代碼時,這種嚴格的類型限制就變成了一個約束。

泛型,就是為了解決這種限制而生的。簡單來說,泛型可以理解為一種“類型模板”,它允許程序員編寫的代碼能夠適應不同的數(shù)據(jù)類型,而不必為每種可能的數(shù)據(jù)類型都編寫一個新版本。

泛型的厲害之處,就在于它的靈活性和重用性。你可以寫一個泛型方法或類,然后在需要的時候用具體的類型去實例化它,比如整數(shù)、字符串或者是你自定義的任何類型。這樣,你就可以用同一套代碼處理不同類型的數(shù)據(jù),極大地提高了代碼的通用性和可維護性。

2、泛型的語法

泛型的基本語法主要包括以下幾個方面:

  1. 泛型類和接口

    • 在類或接口后面加上<T>來聲明一個泛型類或接口。
    • T是類型參數(shù),代表一種未指定的類型。在實例化類或接口時,你可以用具體的類型替換它。
    • 示例:
      public class Box<T> {
          private T t;
      
          public void set(T t) {
              this.t = t;
          }
      
          public T get() {
              return t;
          }
      }
      

    這個例子中,Box類可以用任何類型的對象來實例化,例如Box<Integer>Box<String>

  2. 泛型方法

    • 泛型方法可以定義在普通類中,也可以定義在泛型類中。
    • 在方法返回類型之前使用<T>來聲明一個泛型方法。
    • 示例:
      public <T> T genericMethod(T t) {
          return t;
      }
      

    這個方法可以接受任何類型的參數(shù),并返回相同類型的對象。

  3. 類型通配符

    • 使用?表示未知類型,通常用在參數(shù)、字段、局部變量上,以及泛型方法的返回類型上。
    • 示例:
      public void processElements(List<?> elements) {
          for (Object e : elements) {
              // 處理e
          }
      }
      

    List<?>可以接受任何類型的List

  4. 限定的類型參數(shù)

    • 你可以限制類型參數(shù)可以接受的類型范圍。
    • 使用extends關鍵字來限定類型參數(shù)的上界(即它必須是特定類或接口的子類型)。
    • 示例:
      public <T extends Number> double sum(List<T> numbers) {
          double sum = 0.0;
          for (Number n : numbers) {
              sum += n.doubleValue();
          }
          return sum;
      }
      

這個方法只接受Number類型或其子類的List。

泛型存在的意義:

  • 在編譯的時候,幫我們進行類型的檢查。
  • 在編譯的時候,幫我們進行類型的轉換。

二、泛型類的使用

1、泛型類的語法

泛型類<類型實參> 變量名; // 定義一個泛型類引用

new 泛型類<類型實參>(構造方法實參); // 實例化一個泛型類對象
MyArray<Integer> list = new MyArray<Integer>();

注意:泛型只能接受類,所有的基本數(shù)據(jù)類型必須使用包裝類!

2、泛型如何編譯的

2.1、擦除機制

Java泛型:靈活多變的類型參數(shù)化工具,趣學Java,java,泛型

在編譯時,Java編譯器將所有的泛型類型參數(shù)替換掉,這個過程就是類型擦除。

  • 泛型類型參數(shù)被替換為它們的邊界或者Object。
  • 如果類型參數(shù)是有界的(<T extends Number>),編譯器將類型參數(shù)替換為它的第一個邊界。
  • 如果類型參數(shù)是無界的(<T>),編譯器將類型參數(shù)替換為Object

Java的泛型機制是在編譯級別實現(xiàn)的,編譯器生成的字節(jié)碼在運行期間并不包含泛型的類型信息

2.2、為什么不能實例化泛型類型數(shù)組

class MyArray<T> {
    public T[] array = (T[])new Object[10];
    public T getPos(int pos) {
        return this.array[pos];
    }
    public void setVal(int pos,T val) {
        this.array[pos] = val;
    }
    public T[] getArray() {
        return array;
    }
}

public class demo1 {
    public static void main(String[] args) {
        MyArray<Integer> myArray1 = new MyArray<>();
        Integer[] strings = myArray1.getArray();
    }
}

Java泛型:靈活多變的類型參數(shù)化工具,趣學Java,java,泛型
由于類型擦除的原因,不能直接創(chuàng)建一個泛型數(shù)組。類型擦除會將泛型類型參數(shù)T替換為Object,這導致了類型不匹配,從而在運行時拋出ClassCastException。

3、泛型方法

語法:方法限定符 <類型形參列表> 返回值類型 方法名稱(形參列表) { ... }

例子:寫一個泛型方法,用于交換數(shù)組中兩個元素的位置:文章來源地址http://www.zghlxwxcb.cn/news/detail-788738.html

public class GenericMethodTest {
    // 泛型方法 printArray
    public static < E > void printArray( E[] inputArray ) {
        for(E element : inputArray) {
            System.out.printf("%s ", element);
        }
        System.out.println();
    }

    public static void main(String args[]) {
        // 創(chuàng)建不同類型數(shù)組: Integer, Double 和 Character
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

        System.out.println("整型數(shù)組元素為:");
        printArray(intArray);   // 傳遞一個整型數(shù)組

        System.out.println("\n雙精度型數(shù)組元素為:");
        printArray(doubleArray);   // 傳遞一個雙精度型數(shù)組

        System.out.println("\n字符型數(shù)組元素為:");
        printArray(charArray);   // 傳遞一個字符型數(shù)組
    }
}

  • 泛型方法可以聲明在普通類或泛型類中。
  • 泛型方法的聲明包括一個類型參數(shù)部分,跟在方法的修飾符和返回類型之前。
  • 類型參數(shù)部分是一個尖括號括起來的類型參數(shù)列表,如<T>。

到了這里,關于Java泛型:靈活多變的類型參數(shù)化工具的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 深入理解Java泛型:靈活、安全、可重用的編程利器

    深入理解Java泛型:靈活、安全、可重用的編程利器

    Java泛型是一項強大的編程特性,為程序員提供了一種靈活、類型安全、可重用的編碼方式。通過泛型,我們能夠編寫更加通用、適應多種數(shù)據(jù)類型的代碼,從而提高了代碼的靈活性和可維護性。在這篇博客中,我們將深入探討Java泛型的各個方面,并通過具體的例子來展示其

    2024年03月21日
    瀏覽(33)
  • 【Java 基礎篇】Java可變參數(shù):靈活處理不定數(shù)量的方法參數(shù)

    【Java 基礎篇】Java可變參數(shù):靈活處理不定數(shù)量的方法參數(shù)

    在Java編程中,可變參數(shù)是一項強大的功能,它允許你編寫更加靈活的方法,接受不定數(shù)量的參數(shù)。本文將詳細解釋Java可變參數(shù)的用法、語法以及最佳實踐。 可變參數(shù)是Java 5引入的一項功能,它允許你在方法中傳遞不定數(shù)量的參數(shù)??勺儏?shù)用三個點( ... )表示,放置在方

    2024年04月17日
    瀏覽(24)
  • Java獲取泛型類型信息

    根據(jù)使用泛型位置的不同可以分為:聲明側泛型、使用側泛型。 聲明側的泛型信息被記錄在Class文件的Constant pool中以Signature的形式保存。而使用側的泛型信息并沒有保存。 聲明側泛型 聲明側泛型包括: 泛型類,或泛型接口的聲明 帶有泛型參數(shù)的成員變量 帶有泛型參數(shù)的方

    2024年02月09日
    瀏覽(27)
  • Python列表:靈活多變的數(shù)據(jù)結構

    Python列表:靈活多變的數(shù)據(jù)結構

    在Python 3中,列表是一種有序的集合,它包含了多個元素并且每個元素可以是任意類型的數(shù)據(jù)。列表使用方括號 [ ] 來表示,其中的元素由逗號 , 分隔開。 首先,我們可以創(chuàng)建一個空的列表: 然后,我們創(chuàng)建一個包含多個元素的列表 序列中的每個值都有對應的位置值,稱之為

    2024年02月21日
    瀏覽(12)
  • Java 基礎進階篇(十)—— 泛型與可變參數(shù)

    Java 基礎進階篇(十)—— 泛型與可變參數(shù)

    泛型是 JDK5 中引入的特性,可以在編譯階段約束操作的數(shù)據(jù)類型,并進行檢查。 格式: 數(shù)據(jù)類型; 好處:統(tǒng)一數(shù)據(jù)類型。把運行時期的問題提前到了編譯期間,避免了強制類型轉換可能出現(xiàn)的異常,因為編譯階段類型就能確定下來。 注意: 泛型只能支持引用數(shù)據(jù)類型 。集合

    2024年02月03日
    瀏覽(15)
  • 【Java 基礎篇】Java類型通配符:解密泛型的神秘面紗

    【Java 基礎篇】Java類型通配符:解密泛型的神秘面紗

    在Java中,類型通配符(Type Wildcard)是泛型的重要概念之一。它使得我們能夠更加靈活地處理泛型類型,使代碼更通用且可復用。本文將深入探討Java類型通配符的用法、語法和最佳實踐。 類型通配符是一個用問號 ? 表示的通配符,它可以用于泛型類、方法和通配符邊界。類型

    2024年02月07日
    瀏覽(18)
  • Java中泛型和Object類型 初級進階教程(一)

    在學習的過程中,常??吹侥硞€類或者接口等中使用 ListT, TestT,其中T的作用是什么呢? 1 在類中使用泛型 2 使用多個泛型 3 在類中使用泛型 4 在方法中使用泛型 5 限制泛型類型 6 通配符 (Wildcard) 總結:泛型和Object類型之間的區(qū)別 類型安全: 泛型 T : 泛型提供了編譯時類型

    2024年02月01日
    瀏覽(29)
  • NSubstitute:一個簡單易用、靈活多變的.NET單元測試模擬框架

    推薦一個簡單易用、靈活多變的.NET單元測試模擬框架,讓開發(fā)者能夠更輕松地進行單元測試。 NSubstitute是一個開源的.NET單元測試模擬類庫,該框架設計的主要目標是提供一個簡單明了、易用性強、貼近自然語言的模擬測試框架。它使得開發(fā)者能夠專注于測試工作,而不是糾

    2024年02月07日
    瀏覽(23)
  • 01 java 學習 數(shù)據(jù)類型、基礎語法、封裝、繼承、多態(tài)、接口、泛型、異常等

    01 java 學習 數(shù)據(jù)類型、基礎語法、封裝、繼承、多態(tài)、接口、泛型、異常等

    目錄 環(huán)境搭建和基礎知識 ?什么是JRE: 什么是JDK: 基礎數(shù)據(jù)類型 ?分支選擇if else switch和c一毛一樣 for和while循環(huán)還有數(shù)組基本和c一樣 封裝 函數(shù)調用、傳參、命名規(guī)范、數(shù)組新命名規(guī)范 java輸入Scanner scanner = new Scanner(System.in); 類的創(chuàng)建和使用以及封裝修飾符 ?構造方法:含義、

    2024年02月11日
    瀏覽(46)
  • From Java To Kotlin 2:Kotlin 類型系統(tǒng)與泛型

    上期主要分享了 From Java To Kotlin 1 :空安全、擴展、函數(shù)、Lambda。 這是 From Java ?to Kotlin ? 第二期。 From Java ?to Kotlin ?關鍵在于 思維的轉變 。 Kotlin 中大部分語句是 表達式 。 表達式思維是一種編程思維。 編程思維是一種非常抽象的概念,很多時候是只可意會不可言傳的。

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包