泛型
Object范围非常广,Object由于它是所有类的父类,所以会强制类型转换;
T从一开始在编码时(注意是在写代码时)就限定了某种具体类型,所以它不用强制类型转换。(泛型在虚拟机中会被JVM擦除掉它的具体类型信息)
?接收一个不确定的类型,有点和Object一样。"?"有比Object稍微“高级”有点的用法,就是它能缩小一个不确定的范围,利用类似"? extends Test",这就意味着只接收接收Test类的继承类。可以控制范围,使用父类引用不用强制类型转换。
区别 | 强制类型转换 | 指定范围 | 是否使用子类 | 同一线程同一方法多个类型 |
Object | 是 | 否 | 是(包括自身) | 是 |
T | 否 | 是 | 否 | 否 |
? | 否 | 是 | 是(不包括自身) | 是 |