J2SE5.0新特性之范型编程
2008-02-23 09:44:14来源:互联网 阅读 ()
C 程序员对范型编程肯定不陌生,尤其在STL大行其道的时候,C#2.0也将实现范型编程的功能。Java也不甘示弱,也推出了范型编程的语言新特性。
1.一个简单的范型示例
在以前,你可能遇到过这样的代码:
- List list = new LinkedList();
- list.add(“麻省理工”);
- list.add(“普林斯顿”);
- list.add(“伯克利”);
- String name = (String)list.iterator.next();
注意,第三行需要强制转换。而使用范型:
- List<String> list = new LinkedList<String>();
- list.add(“麻省理工”);
- list.add(“普林斯顿”);
- list.add(“伯克利”);
- String name = list.iterator.next();
这里将list声明成String类型的List。List是有一个类型参数的范型接口。这个例子中类型参数是String。
2.定义简单的范型
看J2SE5.0中List和Iterator接口的实现(片断):
- public interface List<E>
- {
- void add(E x);
- Iterator<E> iterator();
- }
- public interface Iterator<E>
- {
- E next();
- boolean hasNext();
- }
上面的代码我们比较熟悉,但是其中增加了尖括号。尖括号中的内容定义了接口List和Iterator的形式类型参数。类型参数可以用在范型声明中,如类和接口的声明。
一旦声明了范型,你就可以使用它。在上面的例子中使用了List<String>。这里使用String是实参,代替了形参E。如果使用List<Integer>,则用实参Integer代替了形参E。
不管List<Integer>还是List<String>,它们的类只有一个。考虑下面的代码:
- List<String> list1 = new LinkedList<String>();
- List<Integer> list2 = new LinkedList<Integer>();
- System.out.println(list1.getClass()==list2.getClass());
输出结果为true。
一般来说,形式类型参数都是大写,尽量使用单个字母,许多容器类都使用E作为参数。
3.范型和继承
考虑下面的代码,你认为它会出错吗?
- String s = “smallnest@163.com”;
- Object o = s:
当然,String类继承Object类,这样做不会出错。但下面的代码呢?
- List<String> s = new LinkedList<String>();
- List<Object>o=s;
编译出错!
是的,List<Object>和List<String>没有继承关系。
4.通配符
考虑下面一个方法:
- public void printCollection(Collection<Object> c)
- {
- for(Object o:c)
- {
- System.out.printf(“%s%n”,o);
- }
- }
事实上,上面这个方法并不通用,它只能打印Collection<Object>类型的集合,象其他的如Collection<String>、Collection<Integer>并不能被打印,因为对象类型不一致。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash