泛型简介
先拿一个例子来说明泛型是什么。
有两个类如下,要构造两个类的对象,并打印出各自的成员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中文网!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号