从今天开始学习Java的泛型(Generics),它能够帮助程序员书写更加可靠的程序和软件。
1. 介绍
通常,缺陷严重影响着大型程序和软件的使用。通过周密的设计、编码和测试,或许可以减少一些缺陷,但是缺陷对程序来讲简直就是无孔不入,特别是在要引入一些新的特性或者程序越来越大越来越复杂的时候。值得我们高兴的是有些缺陷能很容易被发现,这给我的工作带来了极大的方便。例如编译时的缺陷能够立刻告诉我们某个地方有错误,我们也可以通过编译输出的错误信息判断和找出错误所在,并且修改它。运行时的缺陷就没有那么好对付了,因为它们隐藏的很深,喜欢和我们玩捉秘藏,往往很难被发现,有时即使在某些时候我们发现了它们,要找到产生它们原因的道路还很曲折。泛型(Generics)能够帮助我们在编译程序的时候就发现更多的缺陷。
下面代码定义了一个Box类,有两个方法add()和get()。
public class Box {
private Object object;
public void add(Object object) {
this.object = object;
}
public Object get() {
return object;
}
}
因为它的方法的参数是Object,所以我们可以随意传递任何参数到add()方法中,即使我们要想传递的不是原始类型也没有关系。然而事实上,我们应该严格限制传递的参数类型,但是目前我们只能做的就是在文档中加以说明或者在代码中添加相应的注释,编译器却对参数类型所作限制是不得而知的。
public class BoxDemo {
public static void main(String[] args) {
// ONLY place Integer objects into this box!
Box integerBox = new Box();
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
// Imagine this is one part of a large application
// modified by one programmer.
integerBox.add("10"); // note how the type is now String
// ... and this is another, perhaps written
// by a different programmer
Integer someInteger = (Integer)integerBox.get();
System.out.println(someInteger);
}
}
在BoxDemo中,没有将字符串”<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />10”转换成整数对象,很明显是个缺陷。但是在编译的时候并不能发现这个缺陷,从而造成在运行的时候出现错误。如果在定义Box类的时候能够使用泛型,那么这个错误在编译的时候就会被发现。
文章评论(0条评论)
登录后参与讨论