jdk各版本的区别(四)

2014-11-24 02:57:38 · 作者: · 浏览: 3
lass DBFactory {

protected abstract T createEmptyPeer();

public List get(String constraint) {

List peers = new ArrayList();

// database magic

return peers;

}

}

通过实现DBFactory,CustomerFactory必须从createEmptyPeer()返回一个Customer:

public class CustomerFactory extends DBFactory{

public Customer createEmptyPeer() {

return new Customer();

}

}


泛型方法
不管想要对参数之间还是参数与返回类型之间的泛型类型施加约束,都可以使用泛型方法:
例如,如果编写的反转函数是在位置上反转,那么可能不需要泛型方法。然而,如果希望反转返回一个新的List,那么可能会希望新List的元素类型与传入的List的类型相同。在这种情况下,就需要一个泛型方法:

List reverse(List list)


具体化
当实现一个泛型类时,您可能想要构造一个数组T[]。因为泛型是通过擦除(erasure)实现的,所以这是不允许的。
您可以尝试把Object[]强制转换为T[]。但这是不安全的。


具体化解决方案
按照泛型教程的惯例,解决方案使用的是“类型令牌”,通过向构造函数添加一个Class参数,可以强制客户端为类的类型参数提供正确的类对象:
public class ArrayExample {

private Class clazz;

public ArrayExample(Class clazz) {

this.clazz = clazz;

}

public T[] getArray(int size) {

return (T[])Array.newInstance(clazz, size);

}

}


为了构造ArrayExample,客户端必须把String.class传递给构造函数,因为String.class的类型是Class
拥有类对象使构造一个具有正确元素类型的数组成为可能。
来源自:http://hi.baidu.com/edg_edu/blog/item/70c23b83caa4e1b46d811941.html
jdk1.7的新特性:
1,switch中可以使用字串了
String s = "test";
switch (s) {
case "test" :
System.out.println("test");
case "test1" :
System.out.println("test1");
break ;
default :
System.out.println("break");
break ;
}

作者“J2EE技术探讨”