泛型简介
先拿一个例子来说明泛型是什么。
有两个类如下,要构造两个类的对象,并打印出各自的成员x。
public class StringFoo {
private String x;
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
}
public class DoubleFoo {
private Double x;
public Double getX() {
return x;
}
public void setX(Double x) {
this.x = x;
}
}
如果要实现对Integer、Long、Date等类型的操作,还要写相应的类,实在是无聊之极。
因此,对上面的两个类进行重构,写成一个类,考虑如下:
上面的类中,成员和方法的逻辑都一样,就是类型不一样。Object是所有类的父类,因此可以考虑用Object做为成员类型,这样就可以实现通用了。
public class ObjectFoo {
private Object x;
public Object getX() {
return x;
}
public void setX(Object x) {
this.x = x;
}
}
调用的代码如下:
public class ObjectFooDemo {
public static void main(String args[]) {
ObjectFoo strFoo = new ObjectFoo();
strFoo.setX("Hello Generics!");
ObjectFoo douFoo = new ObjectFoo();
douFoo.setX(new Double("33"));
ObjectFoo objFoo = new ObjectFoo();
objFoo.setX(new Object());
String str = (String)strFoo.getX();
Double d = (Double)douFoo.getX();
Object obj = objFoo.getX();
System.out.println("strFoo.getX=" + str);
System.out.println("douFoo.getX=" + d);
System.out.println("strFoo.getX=" + obj);
}
}
以上,是没有泛型的情况下,我们编写的代码,采用最顶层基类Object进行类型声明,然后将值传入,取出时要进行强制类型转换。
JDK 从1.5 开始引入了泛型的概念,来优雅解决此类问题。采用泛型技术,编写的代码如下:
public class GenericsFoo
private T x;
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
}
调用的代码如下:
public class GenericsFooDemo {
public static void main(String args[]){
GenericsFoo
strFoo.setX("Hello Generics!");
GenericsFoo
douFoo.setX(new Double("33");
GenericsFoo
更多泛型-泛型简介相关文章请关注PHP中文网!