- 浏览: 599242 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
Java中的泛型都是在编译器这个层次来实现的。
在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。
如在代码中定义的List<Object>和List<String>等类型,在编译后都会变成List,JVM看到的只是List,而由泛型附加的类型信息对JVM来说是不可见的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。
Java编译器是通过先检查代码中泛型的类型,然后再进行类型擦除,在进行编译的
类型检查就是针对引用的,谁是一个引用,用这个引用调用泛型方法,就会对这个引用调用的方法进行类型检测,而无关它真正引用的对象。
转自:http://blog.csdn.net/lonelyroamer/article/details/7868820
在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。
如在代码中定义的List<Object>和List<String>等类型,在编译后都会变成List,JVM看到的只是List,而由泛型附加的类型信息对JVM来说是不可见的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。
Java编译器是通过先检查代码中泛型的类型,然后再进行类型擦除,在进行编译的
public class Test10 { public static void main(String[] args) { // ArrayList<String> arrayList1=new ArrayList(); arrayList1.add("1");//编译通过 arrayList1.add(1);//编译错误 String str1=arrayList1.get(0);//返回类型就是String ArrayList arrayList2=new ArrayList<String>(); arrayList2.add("1");//编译通过 arrayList2.add(1);//编译通过 Object object=arrayList2.get(0);//返回类型就是Object new ArrayList<String>().add("11");//编译通过 new ArrayList<String>().add(22);//编译错误 String string=new ArrayList<String>().get(0);//返回类型就是String } }
public class Test4 { public static void main(String[] args) { ArrayList<String> arrayList1=new ArrayList<String>(); arrayList1.add("abc"); ArrayList<Integer> arrayList2=new ArrayList<Integer>(); arrayList2.add(123); //返回true 说明都是原始类型 System.out.println(arrayList1.getClass()==arrayList2.getClass()); } }
类型检查就是针对引用的,谁是一个引用,用这个引用调用泛型方法,就会对这个引用调用的方法进行类型检测,而无关它真正引用的对象。
转自:http://blog.csdn.net/lonelyroamer/article/details/7868820
发表评论
文章已被作者锁定,不允许评论。
-
java WeakHashMap学习(key是弱引用)
2018-06-21 09:31 1232在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 951java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 643(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 通过HttpsUrlConnection访问接口数据
2018-04-19 11:25 988server: ssl: key-stor ... -
java 使用多线程的场景总结
2018-04-10 14:35 1704在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 480/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1621REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 11741.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1617如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 654传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4951.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2453MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1775java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1090Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 432import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 673CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 3251、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2152import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7911.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 583注意事项hibernate配置文件必须设置自动提交否则不能插入 ...
相关推荐
1. **类型擦除**:Java泛型的主要特点是类型擦除。这意味着在编译完成后,所有的泛型信息都会被擦除,替换为Object或者其他基础类型。因此,泛型在运行时并不存在,所有关于泛型的操作都在编译期间完成。 2. **边界...
然而,Java泛型的实现机制——类型擦除,也带来了一系列的问题和限制。本文将深入探讨Java泛型擦除的工作原理、它对编程的影响,以及在实际开发中的应对策略。 Java泛型的类型擦除机制是Java泛型实现的核心,它使得...
Java泛型是Java 5中引入的一项强大特性,它...了解泛型的原理、声明方式、类型擦除、边界以及通配符的使用,对于掌握Java编程中的高级技术至关重要。通过合理地使用泛型,我们可以构建出更加健壮和可扩展的Java应用程序
Java泛型是Java语言中用于处理类型安全的一种机制,它允许在编译期间提供类型检查,并在运行时消除了类型转换。Java泛型深入的内容涵盖泛型的基本概念、泛型类、接口、方法以及泛型的使用限制和高级特性。 首先,...
尽管如此,由于JVM本身的限制,所有的泛型信息在编译后都会被擦除,因此理解类型擦除的概念对于正确使用Java泛型至关重要。开发者应该注意在创建泛型对象时明确指定类型参数,并理解编译时与运行时的区别,以避免...
关于泛型的类型擦除,这是Java泛型的一个重要特性。由于Java的虚拟机不支持泛型,所以在编译后,所有的泛型信息都会被擦除,替换为具体的类型,如`ArrayList<String>`会被转化为`ArrayList<Object>`。这就意味着在...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入。泛型的主要目的是提供类型安全,帮助程序员在编译时发现可能的类型错误,同时也提供了更好的代码重用。在这个"java泛型Demo"中,我们...
类型擦除是Java泛型的一个重要特性,它意味着在运行时,所有的泛型信息都会被消除,替换为Object类型。因此,`A2`类中的`getInfo()`方法必须通过调用`super.getInfo().toString()`来确保返回String类型,因为在编译...
本文将详细介绍Java泛型的概念、原理以及如何在实际开发中使用泛型。 #### 二、泛型的概念与意义 ##### 2.1 什么是泛型? 泛型(Generics)是指在面向对象编程中,通过参数化类型来达到类型重用的目的。通俗地说...
总的来说,Java泛型的继承、实现和擦除原理是理解Java泛型机制的关键。正确地使用这些概念可以帮助我们编写更加安全、可读性更强的代码,并提高代码的复用性。了解这些原则对于Java开发者来说至关重要,有助于避免...
使用场景及目标:帮助读者深入理解Java泛型的内在原理和高级用法,掌握PECS原则,从而能够在项目中更高效地运用泛型,提高代码质量和安全性。 其他说明:文章不仅提供了理论知识,还通过实例代码演示了泛型的实际...
8. 类型擦除(Type Erasure):Java的泛型在实现时使用了类型擦除技术,这意味着泛型类型信息在编译后不会存在于JVM字节码中。这个机制有其优点也有缺点,优点是兼容旧版Java代码,缺点是无法实现泛型数组等特性。 ...
Java泛型是一个强大的特性,它提供了类型安全的集合操作和代码重用性。通过理解泛型的工作原理和高级特性,开发者可以编写出更安全、更灵活的代码。尽管泛型有一些限制,但它仍然是现代Java编程中不可或缺的一部分。
1. 泛型的类型参数只能是引用类型,不能是基本数据类型,因为Java泛型是基于类型擦除的。 2. 泛型可以有多个版本,例如Genericity可以有Genericity、Genericity等不同的类型参数实例。 3. 泛型的参数可以有多个,...
Java泛型的实现方式被称为“擦除”(Erasure),即在编译阶段,编译器会根据泛型参数进行类型检查和推断,但最终生成的字节码并不包含泛型信息。这意味着,如`List<Integer>`和`List<String>`在运行时实际上是同一个...
#### 五、类型擦除与原始类型 - **类型擦除的原理**:为了确保与旧版Java代码的兼容性,Java虚拟机(JVM)在运行时并不识别泛型信息,而是通过类型擦除将泛型类型转换为原始类型。原始类型指的是未指定类型参数的...
本文将详细探讨Java泛型的基础概念、工作原理以及如何在实际开发中有效地使用泛型。 #### 二、Java泛型编程的重要性 Java泛型编程的主要目的是提高代码的复用性和类型安全性。在没有泛型之前,开发者通常使用...
- **实现原理**:泛型的实现机制被称为“类型擦除”。这意味着在编译阶段,编译器会根据泛型参数进行类型检查,确保代码的安全性,之后会将类型信息擦除,并生成常规的字节码。这种机制简化了运行时的操作,但同时也...
1. **类型擦除**:Java的泛型在编译后会被擦除,因此泛型不会在运行时存在。这意味着无法在运行时检查泛型类型,所有有关泛型的检查都在编译时完成。 2. **通配符**:在需要与多种类型的泛型集合交互时,可以使用...