泛型中<T>和<?>的区别
时间: 2023-05-27 10:07:04 浏览: 172
<T>和<?>都是泛型的表示方式,但它们有一些区别:
1. T是一个类型参数,它表示一个具体的类型,可以用来定义类、接口、方法等。例如,List<T>表示一个元素类型为T的列表,T可以是任意一种Java类型。
2. ?是一个通配符,它表示一个未知的类型,通常用在类型声明中。例如,List<?>表示一个元素类型未知的列表,可以是任何一种Java类型。
3. T可以用来定义泛型类、泛型方法等,可以在编译期间进行类型检查。而?只能用在声明中,不能用来定义泛型类或方法。
4. T可以在方法中使用,可以作为方法的返回值、参数等类型,而?只能作为参数类型。
5. T可以在类定义中声明多个类型参数,而?只能表示一个未知类型。
相关问题
Stream<T> filter(Predicate<? super T> predicate);其中T和?代表的含义
Stream<T> 是一个泛型类,表示一个元素类型为 T 的流。filter 方法接受一个 Predicate<? super T> 参数,该参数表示一个函数接口,用于判断流中的元素是否符合条件。其中 T 表示流中的元素类型,? super T 表示该函数接口可以接受 T 类型或 T 的父类作为参数。该方法返回一个新的流,其中包含符合条件的元素。
class<T> 和class<?>
这两个语法是Java泛型中的重要概念。其中,class<T> 表示一个具体的泛型类,其中的 T 是一个类型参数,在使用这个类时需要替换为具体的类型。而 class<?> 则表示一个通配符类型,可以匹配任意类型。通常用于方法参数类型或返回类型的声明中,表示方法对于参数或返回值的类型没有限制。需要注意的是,class<?> 等价于 class<? extends Object>。
阅读全文