Java泛型:泛型擦除详细介绍、泛型擦除的体现

Java泛型:泛型擦除详细介绍、泛型擦除的体现泛型擦除 Java 泛型的参数只可以代表类 不能代表个别对象 由于 Java 泛型的类型参数之实际类型在编译时会被消除 所以无法在运行时得知其类型参数的类型 Java 编译器在编译泛型时会自动加入类型转换的编码 故运行速度不会因为使用泛型而加快 百度百科泛型擦除的体现通过以下代码来感受以下什么是泛型擦除 publicclassE publicstatic String args 创建两个不同泛型的 list 集合

泛型擦除

Java 泛型的参数只可以代表类,不能代表个别对象。由于 Java 泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型。Java 编译器在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。—–百度百科

泛型擦除的体现

通过以下代码来感受以下什么是泛型擦除:

public class Erase { 
     public static void main(String[] args) { 
     // 创建两个不同泛型的list集合 List<Integer> integerList = new ArrayList<>(); List<String> stringList = new ArrayList<>(); System.out.println(integerList.getClass() == stringList.getClass()); System.out.println("integerList----> "+integerList.getClass().getName()); System.out.println("stringList----> "+stringList.getClass().getName()); } } 

输出结果

true integerList----> java.util.ArrayList stringList----> java.util.ArrayList 

Java 泛型擦除是 Java 泛型中的一个重要特性,其目的是避免过多的创建类而造成的运行时的过度消耗。所以,想 ArrayList

和 ArrayList

这两个实例,其实类实例是同一个。

可以把其他类型的数据放到指定了泛型的list集合中吗?

当然是可以的。因为泛型擦除的原因。完全可以将不相干的类型的数据存入指定泛型的集合中。

public class Erase { 
      public static void main(String[] args) { 
      Erase erase = new Erase(); erase.testErase(); } List<Integer> integerList = new ArrayList<>(); List<String> stringList = new ArrayList<>(); public void testErase(){ 
      Double d = 10d; try { 
      // 通过反射机制获取字段,然后将double类型的数据放入泛型为Integer集合中 Field integerField = this.getClass().getDeclaredField("integerList"); integerField.setAccessible(true); List integerFieldList = (List) integerField.get(this); integerFieldList.add(d); // 通过反射机制获取字段,然后将double类型的数据放入泛型为String集合中 Field stringField = this.getClass().getDeclaredField("stringList"); stringField.setAccessible(true); List stringFieldList = (List) stringField.get(this); stringFieldList.add(d); }catch (Exception e){ 
      e.printStackTrace(); } System.out.println("integerList ---> "+integerList); System.out.println("stringList ---> "+stringList); } } 

输出结果

integerList ---> [10.0] stringList ---> [10.0] 




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178740.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:35
下一篇 2026年3月26日 下午4:36


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号