您的位置:首页 > 编程语言 > Java开发

JDK 1.5 新特性——泛型

2012-07-25 13:07 363 查看
  Java中的泛型(Generics)跟C++中的模版大同小异,都是为了简化代码,为变成提供了方便!

1.类型安全

泛型的主要目标是提高Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度

上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中。

2.消除强制类型转换

泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

3.潜在的性能收益

泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型

转换)插入生成的字节码中。但是更多类型 信息可用于编译器这一事实,为未来版本的JVM 的优化带来可能.

JDK5以前的List操作:

类List的函数add接受一个Object参数:

public boolean add(java.lang.Object element);//存入的是Object对象,不能确定对象类型


类List的函数get函数从中取出一个对象:

public java.lang.Object get(int index) throws IndexOutOfBoundsException//取出的也是Object对象,需要强制类型转换


一般编码示例:

List stringList1 = new ArrayList();
stringList1.add("Java 5");
stringList1.add("with generics");
String s1 = (String) stringList1.get(0);


  如果我们能限制装入对象的数据类型,使其保持一致,就能很好的解决这个问题,这样取数据的时候将不要数据类

型的强制转化,这时泛型便应运而生。

ArrayList <String> al = new ArrayList() <String>;
al.add("one"):
//al.add(1);//编译不通过
Employee emp=employeeList.get(0);//不需要强制类型转换


泛型?占位符

package bin.ykb.advanced;

import java.util.ArrayList;
import java.util.Iterator;

/**
* 占位符
*/

public class Placeholder {
private static void show1(ArrayList<?> as) {//直接利用占位符对操作类型进行占位,对任意类型的ArrayList<> 都可以操作,原理和泛型方法差不多
Iterator<?> i = as.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}

private static void show2(ArrayList<String> as) {// 这是为ArrayList<String>量身定做打印,没有什么扩展性
Iterator<String> i = as.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}

public static void main(String[] args) {
ArrayList<String> as = new ArrayList<String>();
as.add("a");
as.add("b");
as.add("c");

ArrayList<Integer> ai = new ArrayList<Integer>();
ai.add(1);
ai.add(2);
ai.add(3);

show1(as);
show1(ai);
System.out.println("============");
show2(as);
// show2(ai);
}
}


最后就是泛型限定。

<? extends Person> 参数只能是Person或Person 类的子类

  
<? super Person> 参数只能是Person,或Person类的父类

  参见java.util.Collections 中的方法

  public static <T> boolean addAll(Collection<? super T> c, T... elements)

参考:

    http://blog.csdn.net/jiang_bing/article/details/6912115

转载请注明出处:

博客园_yokoboy

/article/5991600.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: