在没有泛型以前,从集合里面多到的对象,必须一个个强制类型转换。
如果插入了类型错误的对象,在运行时的转换处理就会出错。有了泛型之后,可以告送编译器每个集合中接受什么类型的对象。编译器将自动为你转化,并在编译时告知是否插入了类型错误的对象。
请不要在新代码中使用原生态类型
声明中具有一个或者多个类型的参数的类或者接口就称为泛型类或者接口。
List接口,就只有单个类型参数E,表示列表元素类型。这个接口的名称应该是指现在的List<E>(读做E的列表),但人们经常把它简称为List。泛型类和接口通称为泛型。
原生态类型List和参数化类型List<Object>之间到底有什么区别呢?不严格的说,前者逃避了泛型检查,后者则明确告送编译器,它能够支持任意类型的对象。虽然你可以将List<String>传递给类型List的参数,但是不能将它传给类型List<Object>的参数。泛型有子类型的化的规则,List<String>是原生态类型List的子类类,而不是参数化类型List<Object>的子类型。如果使用List这样的原始态类型,就会失去类型的安全性,但是使用像List<Object>这样的参数化类型,则不会。
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> ss = new ArrayList<String>();
unSafeAddValue(ss, new Integer(2));
System.out.println(ss.get(0));
}
public static void unSafeAddValue(List list,Object o){
list.add(o);
}
以上程序就会出现
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer
at classandmemberacess.Generic.main(Generic.java:19)
异常。为啥呢?自己思考.
如果要使用泛型,单不确定或者关心实际的类型参数,就可以使用一个问号代替,这是java5提供的一种安全的替代方法,成为无限制的通配副类型。
分享到:
- 2009-11-02 15:38
- 浏览 995
- 评论(1)
- 论坛回复 / 浏览 (1 / 3477)
- 查看更多
相关推荐
泛型则是Java 5引入的一项重要特性,它增强了类型安全性和代码可读性,避免了运行时的类型转换异常。 在这个"学士后Java集合框架和泛型课后习题答案"中,我们可以深入理解以下几个关键知识点: 1. **集合接口**:...
### Java泛型学习知识点 ...例如,认识到泛型的非协变性以及如何正确地使用通配符类型,对于编写健壮的泛型代码至关重要。此外,掌握泛型的构造延迟问题也能帮助开发者在设计泛型类时做出更好的决策。
理解泛型的关键在于认识到类型参数(通常用`T`表示,当然也可以是任何合法的标识符)的作用。类型参数充当了一个占位符的角色,用于在具体使用泛型类或接口时指定实际的类型。这一点与方法的形式参数类似——形式...
在深入了解Java泛型的具体用法之前,我们需要先对泛型的基本概念有一个清晰的认识。泛型的引入主要是为了解决早期Java编程中遇到的一些问题。例如,在没有泛型的情况下,如果想要创建一个能够处理不同类型数据的集合...
学过之后对AWT事件模型、菜单项、图形绘制、集合与泛型会有更深的认识
对泛型的认识不够,导致代码出现了BUG。 第一个原因可以通过以后编码谨慎的打日志来解决,我们主要来一起回顾下 JAVA 泛型基础。 一个小栗子 先看下面一个例子,test1实例化一个List容器的时候没有指定...
泛型化程序设计的思想是STL的灵魂,它不仅包括了对数据结构和算法的泛型化,还包括对需求、概念和模型的泛型化。STL采用迭代器模式来统一不同数据结构的访问方式,实现对容器的统一操作。容器、算法和迭代器的组合...
C#的设计目标是成为一个现代化的、类型安全的、面向对象的编程语言,同时也支持泛型、垃圾回收、异常处理等高级特性。 学习C#首先需要理解它的基础语法。C#语法与C++和Java有诸多相似之处,但也有其独特之处。例如...
根据给定文件的信息,我们...通过上述知识点的介绍,我们对Java中的泛型有了较为全面的认识,包括其基本概念、泛型类、泛型方法、泛型接口以及类型通配符的使用等。这些知识点对于理解和使用Java的泛型功能至关重要。
资源内容:01委托的基本认识,02委托的基本应用,03委托的基本应用练习与总结,04_02自己写泛型委托,04_03Action泛型委托,04泛型委托,05泛型委托Func,06多播委托,07匿名方法,08Lambda表达式简介之输入参数,09匿名方法、...
本章教学目的:介绍C# 高级编程的相关知识,使学生对C# 高级编程有一个感性认识。 一、封装、继承与多态 * 封装:隐藏调用者不需要了解的信息。例如,模块信息通过类封装,类的成员通过字段、属性、方法、事件封装...
无论是在理论研究中进一步深化对有向图的认识,还是在实际应用中提高网络分析、路径规划的效率,它都将是一个有力的助手。随着计算机科学的发展和图论应用的不断扩展,我们期待该项目能够继续演化,进一步解决更多的...
讲:陈冬 第一课:计算机中的环境变量 第二课:认识JVM 安装JDK 第三课:认识JAVA中的变量 第三课:理解类与对象 ...第八课:泛型 第九课:XML 第十课:多线程 第十一课:socket 第十二课:jdbc 第十三课:设计模式
虽然有些人仍然认为泛型是Java的一个重要特性,但越来越多的人开始认识到泛型所带来的负面影响。 #### 抽象与复杂性的控制 埃克尔指出,面对日益增长的复杂性,唯一的解决办法就是通过抽象来隐藏那些不重要的部分...
基于.NET3.5框架的LINQ技术在CAD二次开发中的应用主要涉及了以下...通过这篇文章,读者可以对LINQ技术在CAD二次开发中的实际应用有一个全面的了解,同时也能对生态调水所涉及的社会、经济和环境问题有更为深刻的认识。
TypeScript 是一种静态类型的超集,它为 JavaScript 添加了许多特性,包括类型系统、接口、泛型等,使得代码更易于维护和调试。对于一个 C#程序员来说,学习 TypeScript 可能会感到熟悉又陌生,因为两种语言在面向...
在"实战java反射机制-让你迅速认识java强大的反射机制"这个主题中,我们将深入探讨反射的核心概念和实际应用。 1. 反射基础: Java反射机制主要基于`java.lang.Class`类和`java.lang.reflect`包中的接口和类。`...