_入门泛型的基本应用
JDK1.5新特性:泛型
1、在集合中不使用泛型操作
ArrayList collection1 = new ArrayList();
collection1.add(1); //可以添加 int 类型,编译器有警告
collection1.add(1L); //可以添加 Long 类型,编译器有警告
collection1.add("abc"); //可以添加 String类型,编译器有警告
Object obj = (Object)collection1.get(1); //不能确定得到的结果是什么类型,使用时需要强制类型转换。
2、在集合中使用泛型操作:
ArrayList<String> collection2 =new ArrayList<String>();
//collection2.add(1); //错误的代码,只能添加String类型数据。
collection2.add("abc"); //正确添加
String str = collection2.get(0); //读取数据时不需要强制类型转换。
3、在反射中应用泛型:
Constructor<String> constructor = String.class.getConstructor(StringBuffer.class);
String str = constructor.newInstance(new StringBuffer("abc")); //不需要类型转换
4、总结在哪里可以使用泛型:可以查JDK帮助文档
Class Class<T>、Class Constructor<T>、Class ArrayList<E> :凡是支持泛型的类都可以使用:<T>
_泛型的内部原理及更深应用
1、泛型对类的约束只在javac编译器进行编译时起作用,编译完成后,类字节码中不再带有泛型类型。
ArrayList<Integer> collection = new ArrayList<Integer>();
//collection.add("abc"); //错误的代码
collection.getClass().getMethod("add", Object.class).invoke(collection,"abc");
System.out.println(collection3.get(0)); //打印结果为:abc
2、泛型类型相关术语:ArrayList<E>类定义和ArrayList<Integer>类引用:
整个称为ArrayList<E> 泛型类型
ArrayList<E> 中的 E 称为 类型变量或类型参数
ArrayList<Integer> 称为 参数化的类型
ArrayList<Integer> 中的 Integer 称为类型参数的实例 或 实际类型参数
ArrayList<Integer> 中的 <> 可念成 type of
ArrayList 称为 原始类型
3、参数化类型与原始类型的兼容性:
参数化类型可以引用一个原始类型的对象,编译报警告
Collection<String> c=new vector();//可不可以就是编译器的问题。因为编译后两个类型是兼容的
原始类型可以引用一个参数化类型的对象编译报告警告
Collection c = new Vector<String>();
4、参数化类型不考虑类型的继承关系
Vector<String> v = new Vector<Object>(); //错误
Vector<Object> v = new Vector<String>(); //也是错误的
/***
Vector v1=new Vector<String>();
Vector<Object> v=v1; //这两行代码在编译的时候不会报错。***\
_泛型的通配符扩展应用
1、设计一个方法,打印任意一个泛型集合的各个元素
public void printCollection(Collection<?> collection)
{
//collection.add("abc"); //错误,在使用通配符泛型时不能调用涉及参数化类型的方法
System.out.println(collection.size()); //正确,因为size()方法不涉及参数化类型
for(Object obj : collection)
{
System.out.println(obj);
}
collection = new HashSet<Date>(); //可以这样指定引用
}
总结:使用 ? 通配符可以引用其他各种参数化的类型,? 通配符定义的变量主要用做引用,可以调用与参数化无关的方法,不能调用与参数有关的方法。
2、限定通配符的上下边界:限定通配符总是包括自己
正确:Vectot<? extends Number> x = new Vector<Integer>(); //上边界
错误:Vectot<? extends Number> x = new Vector<String>();
正确:Vectot<? super Integer> x = new Vector<Number>(); //下边界
错误:Vectot<? super Integer> x = new Vector<Byte>();
3、
Class<?> x;
Class<String> y;
x=y; //表达式正确;y=x; 表达式错误。
_泛型集合的综合应用案例
HashMap<String,Integer> maps = new HashMap<String,Integer>();
maps.put("abc",123);
maps.put("xyz",321);
Set<Map.Entry<String,Integer>> entrySet=maps.entrySet();
for(Map.Entry<String,Integer> entry:entrySet)
{
System.out.println(entry.getKey() + ":" + entry.getValue());
}
分享到:
相关推荐
本篇文章将带你入门Java泛型,通过实例深入理解其核心概念。 1. **泛型的基本概念** - 泛型是一种允许在定义类、接口和方法时使用类型参数的机制。这使得代码可以在编译时期检查类型,避免了不必要的类型转换,并...
### 泛型入门阐述 #### 一、泛型的基本概念 泛型是现代编程语言中一个重要的特性,它允许开发者定义类型参数化的类、接口或方法等,从而编写出更加灵活且可重用的代码。在.NET框架下,C#自2.0版本起引入了泛型支持...
在C#中,定义泛型类的基本语法如下: ```csharp public class ClassName { private T[] items; public void Add(T item) { // ... } public T Get(int index) { // ... } } ``` 这里的`T`就是一个类型...
泛型在Java中主要应用于类、接口和方法,使得程序员可以在编译时检查类型安全,并且可以消除运行时的类型检查和强制转换。 1. **泛型的基本概念** - 类型参数:在类或接口声明中,类型参数(如`K`, `V`)代表一种...
**Ehcache 入门详解** Ehcache 是一个开源的、高性能的缓存解决方案,广泛应用于Java应用程序中,能够显著提升数据访问速度并降低数据库负载。本文将深入讲解如何自己编写泛型通用的Ehcache配置和使用,让你更好地...
### Java泛型编程快速入门详解 #### 一、引言 随着Java的发展,JDK 1.5...通过本篇文章的学习,你应该能够理解泛型的基本概念,并能够在实际开发中应用它们。掌握了Java泛型之后,你将能够编写更加灵活和健壮的代码。
使用场景及目标:①理解和应用C++模板的基本概念和语法;②掌握模板在泛型编程中的重要性;③学习模板元编程和SFINAE原则;④理解模板特化与偏特化的使用场景;⑤探索模板在STL中的应用;⑥通过实际案例提升模板设计...
### C# 20中泛型编程初级入门教程 #### 泛型概念及重要性 在探讨C# 20中的泛型编程之前,我们首先需要理解泛型的基本概念及其重要性。 **什么是泛型?** 泛型是一种编程技术,它允许开发人员创建类型安全的代码,...
### C++模板与泛型编程入门教程 #### 一、模板的概念与优势 **1.1 概念** C++模板是一种重要的语言特性,用于实现泛型编程。它允许开发者编写能够处理多种数据类型的代码,而不需要为每种类型单独编写相同的逻辑...
LINQ 入门及应用 .NET 2010 SQL LINQ入门及应用 11/13 原价:48.00元 作者:王的强,张晓娜,周静 编著 出版社:清华大学 出版日期:2009-5-1 ISBN:9787302200253 字数:661000 页码:427 ------------------------...
在本《Java开发实战从入门到精通》的视频教程中,第10章重点讲解了Java泛型。泛型是Java SE 5.0引入的一个重要特性,它为集合提供了类型安全,使得代码更加健壮,同时提高了代码的可读性和可重用性。这一章的学习将...
LINQ 入门及应用 .NET 2010 SQL LINQ入门及应用 8/13 原价:48.00元 作者:王的强,张晓娜,周静 编著 出版社:清华大学 出版日期:2009-5-1 ISBN:9787302200253 字数:661000 页码:427 -------------------------...
LINQ 入门及应用 .NET 2010 SQL LINQ入门及应用 1/13 原价:48.00元 作者:王的强,张晓娜,周静 编著 出版社:清华大学 出版日期:2009-5-1 ISBN:9787302200253 字数:661000 页码:427 -------------------------...
Java SE编程入门教程涵盖了许多核心概念,其中包括Java泛型,它是从Java 1.5版本开始引入的一个重要特性。泛型允许我们在编写代码时指定类型参数,从而在编译时提供类型安全性和代码复用性。 Java中的泛型定义: ...
- 泛型与集合框架的结合是其应用最广泛的场景,可以确保集合中只存储指定类型的数据,避免了类型转换的麻烦和潜在的ClassCastException。 - 如`List<String> stringList = new ArrayList();`,这里声明的`string...
1. **泛型的基本概念**:泛型允许我们在定义类、接口和方法时指定一种或多种类型参数,这样在实际使用时可以传入具体的类型,增强了代码的复用性。 2. **类型参数化**:在类、接口和方法声明前使用尖括号`<T>`来...
Java 入门资料综述 Java 是一种广泛应用于移动设备、Web 应用程序和企业软件开发的编程语言。本资源概括了 Java 的基础知识,涵盖 String、接口和抽象类、泛型、IO 流、反射和多线程等方面。 String String 是 ...
Java SE是Java Standard Edition的缩写,它是Java平台的核心...以上内容涵盖了Java SE中泛型的基本概念、优势、使用方法以及相关注意事项,通过学习这一章节,你将能够更好地理解和应用泛型,提高编程效率和代码质量。