java泛型的一些了解~
java泛型
泛型通常是指集合中用于适配某一种对象类型的说法,类似于Set<?>,List<?>。而泛型是在java1.5之后提出的概念,在没有泛型时,java中实现集合的方式是类似于Set的这种原生态类型。下面就区分一下Set<?>和Set以及Set<Object>,Set<String>的区别。
Set:Set表示的集合类型的原生态类型,是java1.5版本之前普遍使用的初始化方法。
Set s = new HashSet(); String string = "大橘子"; Integer integer = 2; s.add(string); s.add(integer); for(Iterator i = s.iterator();i.hasNext();){ String msg = (String)i.next(); System.out.print(msg); }
这段代码在编译的时候是没有提示错误的,但是运行的时候会报ClassCastException。effectiveJava中明确提到,出现的问题应该尽快发现,最好是在编译时就发现。可以发现,Set这种原生态类型的初始化方法,就使得我们不得不去花精力去预防这种错误的发生,因此,在java1.5版本之后就不应该去使用这种形式。(之所以还允许这么使用,是因为要兼容1.5之前的代码)
Set<?>:问号中表示通配符,可以随便填写(非关键字,字母开头),这就是泛型的表示方式,他表示该集合中只能存放任意且确定的一个类型。
GenericCustom<String> genericCustom1 = new GenericCustom<String>(); GenericCustom<Integer> genericCustom2 = new GenericCustom<Integer>(); String string = ""; Integer integer = 0; genericCustom1.printClassName(string); genericCustom2.printClassName(integer);
public class GenericCustom<guicheng> { public void printClassName(guicheng s){ System.out.println(s.getClass()); } }
Set<Object>:这种方式表示该集合能够接收任何类型对象的集合,它是一个参数化类型。虽然它跟Set这种原生态类型都能接收任意类型的对象,但是在安全性上,前者显然是更优的。可以看下这个例子(参考effectiveJava书中的例子):
public static void main(String[] args) { List<String> strings = new ArrayList<String>(); unsaveAdd(strings,222); String s = strings.get(0); } private static void unsaveAdd(List ls,Object o){ ls.add(o); }
在用List这种原生态类型时,编译是不会报错的,但是执行strings.get(0)方法,是在List<String>中读取一个整型值,这个时候程序就会抛出ClassCastException异常,这显然是不希望看到的结果。因此如果将原生态类型的表示换成List<Object>的参数化类型,程序就会在编译的时候给你提示:
因此,总结一下,Set和List这种原生态类型的表示应该杜绝使用,他们是不安全的,java允许使用这种表示是为了兼容以前的代码。
尽可能的去使用泛型。
- 关于面试需要了解公司的一些情况
- 初学者接触HTML了解一些HTML标记(3)
- 整理下最近了解一些小碎片(1)
- Google Map开发系列(二)——使用谷歌地图API之前应该有所了解的一些技术外背景
- 了解struts2 action的一些原理
- 了解VS2005为你的MFC程序做的一些事
- 前端需要了解的一些知识
- 了解一下一些新词or 旧词
- 了解一些常用的文件系统和一些基础定义
- 关于镍氢充电电池的一些特性了解
- 深入了解当前ETL中用到的一些基本技术
- Linux系统管理员应该了解的一些I/O统计工具
- 有关Ajax的一些文章链接,对想了解这个东东的朋友还是不错的
- 深入了解java泛型
- 了解一些软件许可证的知识
- 你应该了解的 一些web缓存相关的概念
- webpy,希望能多了解一些关于WSGI,PYTHON的WEB开发框架的事,也希望能进一步了解PYTHON
- 在ASP.NET中对Session的一些了解
- 流媒体学习之一些应该再了解的名词
- Java 异常你必须了解的一些知识