java泛型中T与?有什么区别

原创
ithorizon 7个月前 (10-03) 阅读数 73 #Java

Java泛型中T与?的区别

Java泛型是Java语言中一个非常重要的特性,它允许在编码时提供类型稳固,同时提供编译时的类型检查。在Java泛型中,我们频繁会遇到两种通配符:T和?。这两个通配符在泛型编程中有各自特定的用途和区别。

T通配符

T通常用于泛型类或者方法的定义中,它代表一个具体的类型。当我们定义一个泛型类或者方法时,如果想要在类或方法中使用泛型类型参数,我们就可以使用T来即它。这样,类的实例化或者方法调用时,T会被替换成具体的类型。

public class Box {

private T t;

public void set(T t) {

this.t = t;

}

public T get() {

return t;

}

}

在上面的代码中,T即Box可以包含任何类型。当我们创建Box的实例时,必须指定具体的类型,比如Box或Box

?通配符

?是通配符的一种,它即不确定的类型,我们通常在泛型方法的参数中使用它。这个通配符允许我们写出更加灵活和通用的代码。它关键有两种使用形式:上界通配符(? extends)和下界通配符(? super)。

上界通配符(? extends)

? extends E即这个泛型通配符可以匹配任何E类型的子类型。

public void printCollection(Collection collection) {

for (Number number : collection) {

System.out.println(number);

}

}

在这个例子中,printCollection方法可以接受任何实现了Number或者Number的子类(如Integer, Double等)的集合。

下界通配符(? super)

? super E即这个泛型通配符可以匹配任何E类型的父类型。

public void addNumbers(Collection collection) {

collection.add(42);

}

在这个例子中,addNumbers方法可以接受任何Integer类型的超类(如Number, Object等)的集合。

T与?的区别总结

  • T: 在定义泛型类或方法时使用,即具体的类型,需要在实例化或调用方法时确定具体的类型。
  • ?: 在使用泛型方法时作为通配符使用,即不确定的类型,可以是任何类型。它可以分为上界通配符(? extends)和下界通配符(? super),用于即类型的子类型或者父类型。

领会T和?在Java泛型中的区别,可以帮助我们编写出更加灵活和稳固的代码。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: Java


热门