<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 泛型 > 原文: [https://www.programiz.com/java-programming/generics](https://www.programiz.com/java-programming/generics) #### 在本教程中,我們將通過示例了解 Java 泛型,如何創建泛型類和方法及其優勢。 在 Java 中,**泛型**幫助創建可與不同類型的對象(數據)一起使用的類,接口和方法。 因此,允許我們重用我們的代碼。 **注意**:**泛型**不適用于基本類型(`int`,`float`,`char`等)。 * * * ## 泛型的工作原理 要了解 Java 中如何使用**泛型**,我們可以使用 Java 集合框架的`ArrayList`類。 `ArrayList`類是泛型類的示例。 我們可以使用`ArrayList`存儲任何類型的數據。 例如, ```java import java.util.ArrayList; class Main { public static void main(String[] args) { // create an array list to store Integer data ArrayList<Integer> list1 = new ArrayList<>(); list1.add(4); list1.add(5); System.out.println("ArrayList of Integer: " + list1); // creates an array list to store String data ArrayList<String> list2 = new ArrayList<>(); list2.add("Four"); list2.add("Five"); System.out.println("ArrayList of String: " + list2); // creates an array list to store Double data ArrayList<Double> list3 = new ArrayList<>(); list3.add(4.5); list3.add(6.5); System.out.println("ArrayList of Double: " + list3); } } ``` 輸出量 ```java ArrayList of Integer: [4, 5] ArrayList of String: [Four, Five] ArrayList of Double: [4.5, 6.5] ``` 在上面的示例中,我們使用了相同的`ArrayList`類來存儲`Integer`,`String`和`Double`類型的元素。 由于 **Java 泛型**的緣故,這是可能的。 在這里,請注意這行, ```java ArrayList<Integer> list1 = new ArrayList<>(); ``` 我們在尖括號`<>`中使用了`Integer`。 尖括號`<>`在泛型中稱為**類型參數**。 類型參數用于指定泛型類或方法適用的對象(數據)的類型。 * * * ## 創建泛型類 現在我們知道了泛型在 Java 中的工作方式,讓我們看看如何創建自己的泛型類。 ### 示例:創建泛型類 ```java class Main { public static void main(String[] args) { // initialize generic class with Integer data GenericsClass<Integer> intObj = new GenericsClass<>(5); System.out.println("Generic Class returns: " + intObj.getData()); // initialize generic class with String data GenericsClass<String> stringObj = new GenericsClass<>("Java Programming"); System.out.println("Generic Class returns: " + stringObj.getData()); } } class GenericsClass<T> { // variable of T type private T data; public GenericsClass(T data) { this.data = data; } // method that return T type variable public T getData() { return this.data; } } ``` Output ```java Generic Class returns: 5 Generic Class returns: Java Programing ``` 在上面的示例中,我們創建了一個名為`GenericsClass`的泛型類。 此類可用于處理任何類型的數據。 ```java class GenericsClass<T> {...} ``` 在此,`T`表示**類型參數**。 在`Main`類內部,我們創建了名為`intObj`和`stringObj`的`GenericsClass`對象。 * 在創建`intObj`時,類型參數`T`被`Integer`代替。 這意味著`intObj`使用`GenericsClass`處理整數數據。 * 在創建`stringObj`時,類型參數`T`被替換為`String`。 這意味著`stringObj`使用`GenericsClass`處理字符串數據。 * * * ## 創建泛型方法 與泛型類相似,我們也可以使用 Java 創建自己的泛型方法。 ### 示例:創建泛型方法 ```java class Main { public static void main(String[] args) { // initialize the class with Integer data DemoClass demo = new DemoClass(); demo.<String>genericsMethod("Java Programming"); } } class DemoClass { // generics method public <T> void genericsMethod(T data) { System.out.println("This is a generics method."); System.out.println("The data passed to method is " + data); } } ``` **輸出** ```java This is a generics method. The data passed to the method: Java Programming ``` 在上面的示例中,我們在普通類內部創建了一個名為`genericsMethod`的泛型方法。 ```java public <T> void genericMethod(T data) {...} ``` 在此,將類型參數`<T>`插入到修飾符(`public`)之后和返回類型(`void`)之前。 我們可以通過將實際類型`<String>`放在方法名稱之前的方括號內來調用泛型方法。 ```java demo.<String>genericMethod("Java Programming"); ``` **注意**:在大多數情況下,我們可以在調用泛型方法時省略類型參數。 這是因為編譯器可以使用傳遞給方法的值來匹配類型參數。 例如, ```java demo.genericsMethod("Java Programming"); ``` * * * ## 有界類型 通常,**類型參數**可以接受任何數據類型(原始類型除外)。 但是,如果我們只想將泛型用于某些特定類型(例如接受數字類型的數據),則可以使用有界類型。 我們使用`extends`關鍵字。 例如, ```java <T extends A> ``` 這意味著`T`只能接受屬于`A`子類型的數據。 ### 示例:有界類型 ```java class GenericsClass <T extends Number> { public void display() { System.out.println("This is a bounded type generics class."); } } class Main { public static void main(String[] args) { // create an object of GenericsClass GenericsClass<String> obj = new GenericsClass<>(); } } ``` 在上面的示例中,我們創建了具有**有界類型**的泛型類。 在這里,請注意表達式 ```java <T extends Number> ``` 這意味著`T`只能使用屬于`Number`子級的數據類型(`Integer`,`Double`等)。 但是,我們使用`String`創建了泛型類的對象。 這就是為什么當我們運行程序時,會出現以下錯誤。 ```java GenericsClass<String> obj = new GenericsClass<>(); ^ reason: inference variable T has incompatible bounds equality constraints: String lower bounds: Number where T is a type-variable: T extends Number declared in class GenericsClass ``` * * * ## Java 泛型的優點 ### 1.代碼可重用性 **泛型**允許我們編寫適用于不同類型數據的代碼。 例如, ```java public <T> void genericsMethod(T data) {...} ``` 在這里,我們創建了一個泛型方法。 此方法可用于對整數數據,字符串數據等執行操作。 ### 2.編譯時類型檢查 泛型的**類型參數**提供有關泛型代碼中使用的數據類型的信息。 因此,可以在編譯時識別任何錯誤,比運行時錯誤更容易修復。 例如, ```java // without using Generics NormalClass list = new NormalClass(); // calls method of NormalClass list.display("String"); ``` 在上面的代碼中,我們有一個普通的類。 我們通過傳遞字符串數據來調用此類的名為`display()`的方法。 在這里,編譯器不知道在參數中傳遞的值是否正確。 但是,讓我們看看如果改用泛型類會發生什么。 ```java // using Generics GenericsClass<Integer> list = new GenericsClass<>(); // calls method of GenericsClass list2.display("String"); ``` 在上面的代碼中,我們有一個泛型類。 在這里,類型參數指示該類正在處理`Integer`數據。 因此,當在參數中傳遞字符串數據時,編譯器將生成錯誤。 ### 3.與集合一起使用 集合框架使用 Java 中泛型的概念。 例如, ```java // creating a string type ArrayList ArrayList<String> list1 = new ArrayList<>(); // creating a integer type ArrayList ArrayList<Integer> list2 = new ArrayList<>(); ``` 在上面的示例中,我們使用了相同的`ArrayList`類來處理不同類型的數據。 與`ArrayList`相似,其他集合(`LinkedList`,`Queue`,`Maps`等)在 Java 中也是通用的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看