
- Java泛型教程
- Java泛型 - 首頁
- Java泛型 - 概述
- Java泛型 - 環境搭建
- 示例 - 泛型類
- Java泛型 - 泛型類
- 型別引數命名約定
- Java泛型 - 型別推斷
- Java泛型 - 泛型方法
- Java泛型 - 多個型別引數
- Java泛型 - 引數化型別
- Java泛型 - 原始型別
- 示例 - 有界型別
- 有界型別引數
- Java泛型 - 多個邊界
- 示例 - 集合
- Java泛型 - 泛型列表
- Java泛型 - 泛型集合
- Java泛型 - 泛型對映
- 示例 - 萬用字元
- 上界萬用字元
- 泛型 - 無界萬用字元
- 下界萬用字元
- 泛型 - 萬用字元使用指南
- 型別擦除
- Java泛型 - 型別擦除
- Java泛型 - 有界型別擦除
- 無界型別擦除
- Java泛型 - 方法擦除
- 泛型的限制
- Java泛型 - 不允許使用基本型別
- Java泛型 - 不允許建立例項
- Java泛型 - 不允許使用靜態欄位
- Java泛型 - 不允許強制型別轉換
- Java泛型 - 不允許使用instanceOf
- Java泛型 - 不允許建立陣列
- Java泛型 - 不允許使用異常
- Java泛型 - 不允許過載
- Java泛型有用資源
- Java泛型 - 快速指南
- Java泛型 - 有用資源
- Java泛型 - 討論
Java泛型 - 泛型方法型別擦除
如果使用無界型別引數,Java 編譯器會將泛型型別中的型別引數替換為 Object;如果使用有界型別引數,則會將型別引數替換為方法引數的型別。
示例
package com.tutorialspoint; public class GenericsTester { public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); Box<String> stringBox = new Box<String>(); integerBox.add(new Integer(10)); stringBox.add(new String("Hello World")); printBox(integerBox); printBox1(stringBox); } private static <T extends Box> void printBox(T box) { System.out.println("Integer Value :" + box.get()); } private static <T> void printBox1(T box) { System.out.println("String Value :" + ((Box)box).get()); } } class Box<T> { private T t; public void add(T t) { this.t = t; } public T get() { return t; } }
在這種情況下,Java 編譯器將用 Object 類替換 T,並且在型別擦除後,編譯器將為以下程式碼生成位元組碼。
package com.tutorialspoint; public class GenericsTester { public static void main(String[] args) { Box integerBox = new Box(); Box stringBox = new Box(); integerBox.add(new Integer(10)); stringBox.add(new String("Hello World")); printBox(integerBox); printBox1(stringBox); } //Bounded Types Erasure private static void printBox(Box box) { System.out.println("Integer Value :" + box.get()); } //Unbounded Types Erasure private static void printBox1(Object box) { System.out.println("String Value :" + ((Box)box).get()); } } class Box { private Object t; public void add(Object t) { this.t = t; } public Object get() { return t; } }
在這兩種情況下,結果都是相同的 -
輸出
Integer Value :10 String Value :Hello World
廣告