泛型的基本应用、内部原理及更深应用
1. jdk1.5以前的集合类中存在什么问题
a) ArrayLIst collection = new ArrayList();
collectin.add(1);
collection.add(1L);
collection.add(“abc”);
int I = (Integer)ArrayList.get(1); //编译器强制类型转换且运行时出错
2. jdk1.5的集合类希望你在定义集合时,明确规定表示你要向集合中装哪种类型的数据,无法加入指定类型以外的数据;
a) ArrayList<Integer> collection2 = new ArrayList<Integer>();
collection2.add(1);
collection2.add(1L); //error
collection2.add(“abc”); //error
int i2 = collection2.get(0); //利用泛型号,不需要强制转换了
3. 泛型号是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉类型信息,使程序运行效率不受影响,对于参数化的类型,getClass()方法的返回值和原始类型完全一样。由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如,用拟向得到集合,再调用其add方法即可。
4. ArrarList<E> 类定义和ArrayList>Integer>类引用中涉及如下术语言:
b) 整个称为ArrayList<E>泛型类型
c) ArrayList<E>中的E称为类型变量或类型参数
d) ArrayList<Integer>称为参数化类型
e) ArrayList<Integer>中的Integer称为类型参数的实例或实际类型参数
f) ArrayList<Integer>中的<>念typeof
g) ArrayList称为原始类型
5. 参数化类型与原始类型的兼容性:
h) 参数化类型可以引用一个原始类型的对象,编译器给予警告,例如:
Collection<String> c = new Vector();
i) 原始类型可以引用一个参数化的类型对象,编译器给予警告,例如
Collection = new Vector<String>(); //原来的方法接受一个集合参数,新的类型也要能传进去。
6. 参数化类型不考虑类型参数的继承关系:
j) Vector<String> v = new Vector<object>();//error
k) Vector<Object> v = new Vector<String>(); //error to
7.在创建数组实例时,数组的元素不能使用参数化的类型,例如,下面的语句有错误:
Vector<Integer> vectorList[] = new Vector<Integer>[10];
8.下面的代码会报错吗? 一看会,实际却不会,编译器是一行一行检查的
Vector v1 = new Vector<String>(); Vector<Object> v = v1;
泛型的通配符扩展应用
A. 限定通配符的上边界://上边界为Number
a) 正确:Vector<? extends Number> x = new Vector<Integer>();
错误:Vector<? extends Number> x = new Vector<String>();
B. 限定通配符的下边界 // 下边界为Integer
正确:Vector<? super Integer> x = new Vector<Number>();
错误:Vector<? super Integer> x = new Vector<Byte>();
综合实例代码:
分享到:
相关推荐
在“java泛型的内部原理及更深应用”这个主题中,我们将深入探讨以下几个关键知识点: 1. **类型擦除**:Java泛型的主要特点是类型擦除。这意味着在编译完成后,所有的泛型信息都会被擦除,替换为Object或者其他...
通过这些示例,你可以更直观地理解泛型的工作原理和实际应用。 总之,Java泛型是提高代码质量、安全性和效率的重要工具。理解和掌握泛型的使用,对于任何Java程序员来说都是必不可少的。在这个"java泛型Demo"中,你...
数据库是现代软件系统的基石,了解其内部原理和分布式事务处理是成长为高级Java开发者不可或缺的一部分。 第八部分专注于分布式缓存的原理及应用,介绍分布式缓存的介绍、Ehcache和Redis的原理及应用,以及分布式...
4. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashSet、HashMap等,这些例子将教你如何存储和操作数据集,理解其内部原理和选择合适的集合类型。 5. **输入/输出流**:Java的I/O流系统用于处理数据的...
这部分内容可能涉及到更深层次的类设计技巧,例如: - **泛型**:深入理解泛型的作用、优势及其实现方式,掌握泛型类、泛型接口和泛型方法的定义和使用。 - **集合框架**:熟练掌握Java集合框架(Collection ...
泛型的内部原理及更深应用 - 泛型在编译时会被擦除为`Object`类型,但在编译阶段会进行类型检查以确保类型安全。 - 可以使用泛型来创建类型安全的方法或类。 ##### 3. 泛型的通配符扩展应用 - 通配符可以用于创建...
《C++数据结构原理与经典问题求解》一书深入探讨了C++编程语言在构建高效数据结构和解决算法问题中的应用。这本书的源代码包含了大量示例,旨在帮助读者理解并掌握数据结构的核心概念以及如何用C++来实现它们。通过...
ArrayList虽然简单易用,但在.NET Framework 2.0之后,微软推荐使用更安全、性能更好的List类。然而,理解ArrayList的工作原理和应用场景仍然是学习C#基础的重要部分。 ArrayList的应用主要体现在以下几个方面: 1...
这本书详细阐述了.NET公共语言运行时(CLR)的内部工作原理,同时提供了许多实用的编程建议和深层次的理解。Jeffrey Richter是Wintellect公司的联合创始人,该公司是一家专门提供培训和咨询服务的公司,旨在帮助企业...
7. STL与C++11及更高版本:虽然《STL源码剖析》是基于较早的C++标准,但它依然对于理解C++11、C++14及更高版本的STL有极高的价值,因为STL的基本结构和原理并没有发生根本变化。 总的来说,《STL源码剖析》是一本...
4. **集合框架**:详述ArrayList、LinkedList、HashMap、HashSet等常用集合类的内部实现及操作方式,以及泛型、迭代器和并发容器的使用。理解集合框架可以帮助编写更高效、更安全的代码。 5. **IO流与NIO**:讲解...
学生将学习如何在一个函数内部调用另一个函数,以及如何编写递归函数,理解递归的原理及其在解决复杂问题时的作用。 实验5:C++的头文件和多文件结构 这涉及到了程序的组织和模块化,学习如何使用#include指令导入...
此书旨在为读者提供对Android操作系统更深层次的理解与探索,是针对有一定开发经验和技术基础的开发者所编写的进阶读物。下面将对该书可能涉及的一些核心知识点进行详细阐述。 ### Android系统架构 Android系统的...
通过这本书,读者能够更深入地了解STL的内在逻辑,并且能够从侯捷的解读中获得对于这些概念更深层次的理解。这本书可以看作是站在前人智慧的基础上,对编程技巧的深化和拓展,它不仅仅是对STL源码的注释,更是对...
- **泛型**:介绍 Java 5 引入的泛型功能,使代码更具灵活性和可重用性。 - **并发编程**:探讨 Java 中的线程和并发机制,帮助开发者设计高性能的并发应用程序。 - **网络编程**:讲解如何利用 Java 进行网络通信,...
对于初学者,可以从理解Servlet和JSP的基本概念开始,逐步掌握数据库操作和MVC框架的应用,然后深入研究反射和泛型以提升编程能力。而对于有经验的开发者,自写框架或深度学习现有框架如Spring MVC,可以进一步提高...
- 哈希表的工作原理及冲突解决 - 树结构(二叉树、红黑树、AVL树)的基本概念 - 排序算法(快速排序、归并排序、冒泡排序等) - 查找算法(二分查找、哈希查找) 3. **多线程与并发**: - 线程的状态转换与...
理解这些容器的内部工作原理,可以帮助开发者优化代码,选择最适合特定场景的容器。 在容器的实现原理部分,你可能会学到如何使用指针、迭代器以及内存管理技术,如动态分配和释放。此外,STL的算法如排序、查找和...
5.2 分析Java类库的源码,如ArrayList的实现,理解其内部原理,加深对Java内存模型的理解。 六、实践应用 6.1 Web开发:通过学习Servlet和JSP,了解Java在Web领域的应用,构建简单的Web应用。 6.2 数据库连接:使用...