weiwei_baby 2020-03-16 22:18 采纳率: 33.3%
浏览 203

关于泛型中类型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的类型,那还需要通配符?干嘛呢?

  • 写回答

1条回答 默认 最新

  • 有头发的猿 2020-03-17 15:04
    关注

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

报告相同问题?

悬赏问题

  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)