Java泛型绑定类型擦除 Java泛型类型擦除 Java泛型无限类型擦除 如果使用有界的类型参数,Java编译器将用它们的边界替换泛型类型中的类型参数。 例 package com.codingdict; public class GenericsTester { public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); Box<Double> doubleBox = new Box<Double>(); integerBox.add(new Integer(10)); doubleBox.add(new Double(10.0)); System.out.printf("Integer Value :%d\n", integerBox.get()); System.out.printf("Double Value :%s\n", doubleBox.get()); } } class Box<T extends Number> { private T t; public void add(T t) { this.t = t; } public T get() { return t; } } 在这种情况下,java编译器将用Number类替换T,在类型擦除后,编译器将为下面的代码生成字节码。 package com.codingdict; public class GenericsTester { public static void main(String[] args) { Box integerBox = new Box(); Box doubleBox = new Box(); integerBox.add(new Integer(10)); doubleBox.add(new Double(10.0)); System.out.printf("Integer Value :%d\n", integerBox.get()); System.out.printf("Double Value :%s\n", doubleBox.get()); } } class Box { private Number t; public void add(Number t) { this.t = t; } public Number get() { return t; } } 在这两种情况下,结果都是一样的 - 输出 Integer Value :10 Double Value :10.0 Java泛型类型擦除 Java泛型无限类型擦除