Java解惑之Object、T(泛型)、?区别

先来看一段代码

List list1 = new ArrayList<>();
list1.add("hello");
list1.add(0);

List list2 = new ArrayList<>();
list2.add("world");

List list3 = new ArrayList<>();
list3.add("1");

我们知道List本省就是一个泛型类

第一段代码中,我们传入了一个Object类型,当我们调用add方法时,可与传入任何类型的参数,因为任何类都是Object的子类

第二段代码中,我们传入了一个String类型,相当于已经限定了T的类型就是String类型,因此当我们调用add方法时,只能传入String类型

第三段代码中,在调用add方法时,编译器会报错

区别

三者的定义

Object,任何类的父类
T,泛型参数
?,类型通配符

Object和的区别

由于Object是任何类的父类,因此它的范围会非常广
T,在传入的时候就已经限定了参数的类型

和的区别

讨论“"和"",首先要区分开两种不同的场景:

  1. 声明一个泛型类或泛型方法
  2. 使用一个泛型类或泛型方法

类型参数“”主要用于第一种,声明泛型类或泛型方法。 无界通配符“”主要用于第二种,使用泛型类或泛型方法。

声明泛型类的类型参数
 class Box{
    private T item1;
    private T item2;
}
声明泛型类不能用无界通配符
//编译报错
class Box{
    private ? item1;
    private ? item2;
}
有界通配符,

或者两种,带有上下界的通配符

你可能感兴趣的:(Java解惑之Object、T(泛型)、?区别)