一、下面是说明泛型的基本原理与代码的应用
/**
* 利用反射就可以不用把StringBuffer装换成String,因为构造器知道是存放的是String类型
*/
Constructor<String> constructor1 = String.class.getConstructor(StringBuffer.class);
String str2 = constructor1.newInstance(new StringBuffer("abc"));
泛型的基本原理:
下面利用实例代码利用反射式怎样跳跃编译器的检查
ArrayList<Integer> collection3 = new ArrayList<Integer>();
collection3.getClass().getMethod("add",Object.class).invoke(collection3,"ssss");
System.out.println(" collection3 :"+collection3.get(0));
编译器一行一行代码进行语法检查,所以都不会报错,充分理解编译阶段和运行阶段的概念
二、讲解泛型通配符?
如果要打印一个集合所有的元素,要打印的集合不管什么么类型的集合
当第一个这样的集合:
ArrayList<Integer> collection3 = new ArrayList<Integer>();
collection3.add(3);
printCollections(collection3);
public void printCollections(Collection<Object> collection){
for(Object obj : collection){
System.out.println(obj);
}
}
这样实验后是不可以通过编译器的语法校验的,因为collection3语法上是放Integer元素,但是传过去的编译器就会说怎么会存放Object类型呢?也就是说collection3集合引用了参数化Integer怎么可能又同时引用参数Object类型呢?
因此解决的方案就是在Collection<?>通配符就可以解决以上的问题
使用?通配符就可以引用其他类型化参数的类型,?通配符在定义变量主要用作做引用,可以调用与参数化无关的方法,不能调用不参数化有关的方法.
一个简单代码的引用的说明
Class<?> y=Class.forName("java.lang.String");
Class<String> x=null;
/***
* 也就是说不知道什么类型可以引用确定的参数化类型,
* 但是参数化的类型不能引用不知道的类型
*/
y= x;
这个是复习对于HashMap是怎么操作的.............
HashMap<String,Integer> maps=new HashMap<String,Integer>();
maps.put("hewen",23);
maps.put("heli",21);
maps.put("hewu",18);
//这个是三种遍历方式
for(String key:maps.keySet()){//得到maps中所有的key值,也就是一个集合
System.out.println("key: "+key);
}
for(Integer value:maps.values()){//得到maps中所有values值,这里也是一个集合
System.out.println(value);
}
for(Map.Entry<String,Integer> entry:maps.entrySet()){
System.out.println("姓名: "+entry.getKey()+" 年龄:"+entry.getValue());
}
Map的内部结构如图所示:
Entry是Map的内部类
- 大小: 29 KB
- 大小: 58.8 KB
- 大小: 36.2 KB
- 大小: 14 KB
分享到:
相关推荐
在“java泛型的内部原理及更深应用”这个主题中,我们将深入探讨以下几个关键知识点: 1. **类型擦除**:Java泛型的主要特点是类型擦除。这意味着在编译完成后,所有的泛型信息都会被擦除,替换为Object或者其他...
### C#中的泛型机制详解 #### 泛型的基本概念 C#的泛型是一种强大的功能,它允许程序员创建能够处理任何数据类型的类、接口或方法。通过泛型,可以在编写一...掌握泛型的基本原理和内部实现机制对于高效编程至关重要。
C#泛型是.NET框架中一个强大的特性,它允许开发者创建可重用的代码模板,这些模板可以在编译时或运行时与多种数据类型一起工作。泛型的主要目标是提高性能、安全性和代码的可读性。在C#中,泛型主要体现在类、接口、...
在JVM内部,所有的泛型信息都会在编译时被擦除,这种机制被称为类型擦除(Type Erasure),即在虚拟机中泛型类型参数的任何信息都不保留,使得在运行时的性能不会受到影响。 类型擦除意味着`List<String>`和`List...
1. **泛型的概念与优点** - 泛型是.NET框架引入的一种机制,它允许我们在定义类、接口、方法或委托时延迟指定类型,直到在实际使用时才确定。这带来了以下优势: - 类型安全:编译器可以在编译时检查类型一致性,...
在本文中,我们将深入探讨泛型编程的概念、原理以及它如何影响程序性能,特别是与时间测试相关的方面。 首先,泛型编程的核心思想是参数化类型。这意味着我们可以定义一个函数或类,其中的某些部分可以用类型作为...
在《泛型编程与STL》这本书中,作者深入探讨了这两个主题,旨在帮助读者理解和掌握如何在实际项目中有效应用泛型编程和STL。书中的内容可能包括以下几个方面: 1. 泛型编程基础:介绍泛型编程的基本理念,如函数...
通过这些示例,你可以更直观地理解泛型的工作原理和实际应用。 总之,Java泛型是提高代码质量、安全性和效率的重要工具。理解和掌握泛型的使用,对于任何Java程序员来说都是必不可少的。在这个"java泛型Demo"中,你...
通过深入理解STL的内部机制,如迭代器的原理和算法的实现,开发者可以更好地优化代码,避免不必要的拷贝和内存分配,从而提升程序的运行效率。此外,STL还为C++程序员提供了与其他高级语言如Java和C#的集合框架相...
下面将深入探讨泛型的实例代码及其背后的原理。 一、泛型的基本概念 泛型是Java中一种用于处理不同数据类型的模板设计模式。在类、接口或方法声明中使用类型参数,可以限制这些结构能操作的数据类型。例如,我们...
阻塞队列是一种在多线程编程中广泛使用的并发数据结构,它在计算机科学和编程领域,特别是Java和C++等面向对象语言...在理解和使用时,需要理解其内部原理,合理选择队列容量,以及适当使用不同的操作方法来优化性能。
侯捷老师的《泛型编程与STL》这本书深入浅出地讲解了这些概念,并结合实际示例展示了如何有效地使用STL。书中可能涵盖了以下主题: 1. 泛型编程的基本原理,包括模板的工作机制和类型推导。 2. STL容器的内部实现,...
在《泛型程式设计与 STL》这本书中,读者可以深入理解如何利用这些工具提高代码效率和可维护性。书中可能会涵盖以下主题: 1. 泛型编程基础:解释什么是类型参数化,以及如何使用模板创建泛型函数和类。 2. STL...
C++是一种强大的面向对象编程语言,它在软件开发领域中占据着重要的地位。STL(Standard Template Library,标准...在阅读C++STL程序员开发指南时,记得将理论与实践相结合,通过编写实际的代码来巩固你的理解和技能。
本笔记主要涵盖了数据基础和泛型编程两大主题,同时也涉及到类和对象、数据类型、类的初始化和加载以及单例模式等多个知识点。 1. **数据基础** - **形参实参的使用**:在函数调用时,形参是方法定义中的参数,而...
迭代器的实现原理涉及到内部指针和迭代状态的管理。 9. **返回首次出现索引**:在ArrayList中,可以使用indexOf()方法找到指定元素首次出现的索引。如果元素不存在,该方法返回-1。 10. **泛型方法**:泛型方法...
尽管原文并未直接提及具体的C++知识点,但从标题“C++程序设计原理与实践”以及描述中提到的学习Qt的需求来看,我们可以围绕C++的基础知识、Qt框架的应用、以及与之相关的软件开发工具和技术进行展开。 ### C++程序...
从给定的文件信息来看,这是一篇关于C++程序设计原理与实践的深度解析,由C++之父所著,旨在深入探讨C++的高级编程技术和设计理念。下面,我们将根据标题、描述、标签和部分内容,提炼出相关的知识点。 ### C++程序...
数据库是现代软件系统的基石,了解其内部原理和分布式事务处理是成长为高级Java开发者不可或缺的一部分。 第八部分专注于分布式缓存的原理及应用,介绍分布式缓存的介绍、Ehcache和Redis的原理及应用,以及分布式...
它不仅对每种数据结构的内部工作原理进行了清晰的阐述,还对其在不同应用场景中的操作与应用进行了详细的讲解。通过学习,读者能够深刻理解数据在内存中的组织方式,以及如何通过合适的数据结构来提升程序的性能和...