关于泛型中类型T的疑问

代码如下:

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');