泛型擦除
在严格的泛型代码里,带泛型声明的类总应该带着类型参数。但为了与老的 Java 代码保持一致,也允许在使用带泛型声明的类时不指定类型参数。如果没有为这个泛型类指定泛型参数,则该类型参数被称作一个原始类型(raw Type)。
如果在使用泛型类或泛型接口的时候,没有指定泛型实参,会怎么样?(泛型擦除现象,泛型擦除后,泛型形参被解析为什么类型呢?)
(1)如果没有指定泛型形参的上限,就按照 Object 处理;
(2)如果指定泛型形参的上限,就按照上限处理,如果有多个上限,多个上限用&连接,按照最左边的第一个上限处理。
Demo:
1 public class TestErase { 2 public static void main(String[] args) { 3 //ArrayList<String>被转换为了ArrayList 4 ArrayList list = new ArrayList<String>(); 5 list.add("Hello"); 6 list.add("World"); 7 //泛型被擦除,按照默认上限Object处理 8 Object object = list.get(1); 9 10 Student s = new Student("张三",12); 11 12 //泛型被擦除,按照第一个上限Number处理 13 Number score = s.getScore(); 14 } 15 } 16 class Student<T extends Number & java.io.Serializable>{ 17 private String name; 18 private T score; 19 public Student(String name, T score) { 20 super(); 21 this.name = name; 22 this.score = score; 23 } 24 public T getScore() { 25 return score; 26 } 27 }
原文地址:https://www.cnblogs.com/niujifei/p/12208188.html
时间: 2024-10-08 17:26:38