代码如下:
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class FanXingT<T> {
private T over;
public T getOver() {
return over;
}
public void setOver(T over) {
this.over = over;
}
public static void main(String args[]) {
FanXingT f = new FanXingT();
f.setOver(1);
System.out.println(f.getOver());
f.setOver(1.55);
System.out.println(f.getOver());
Set s = new HashSet();
s.add(1);
s.add("a");
s.add('c');
f.setOver(s);
Iterator it = s.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
可以看到我在实例化FanXingT时并没有指定T的类型,那还需要通配符?干嘛呢?
T 表示的是一个没有具体类型的对象,当我们没有具体指明T的类型时,它将是一个Object类型,也就是任何对象的父类,正因为如此,所以你可以在设置它时轻松的转换具体类型:
f.setOver(1); //设置 T 为 Integer 类型
f.setOver(1.55);// 设置T 为Double类型
这样就简化了代码,提高我们的效率。否则,我们每次不同的类型,都需要为此去创建一个 FanXingInteger、FanXingDouble等等对象。、
当然,当我们为T指定了具体类型时,T将只能是我们指定的具体类型,例如:
Set<String> s = new HashSet<String>();
//s.add(1); //编译时期便会报错,因为我们这个时候指定了T的具体类型为String类型。
s.add("a");
s.add('c');