- 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
广告