Java泛型<? extends T>和<? super T>

简介:
<? extends T>是泛型的上界(含),<? super T>是泛型的下界(含),
而且,对泛型不能只约束下限,如果只对子类做约束,父类可以千奇百怪。

extends后面跟的类型如<任意字符 extends 类/接口>表示泛型的上限,

super表示泛型的下限。

1
2
3
4
5
6
7
8
9
10
import  java.util.*;
class  Demo<T  extends  AbstractList>{}
public  class  Test
{
     public  static  void  main(String[] args) {
     Demo<ArrayList> p =  null ;  // 编译正确
//这里因为ArrayList是AbstractList的子类所以通过
//如果改为Demo<AbstractCollection> p = null;就会报错这样就限制了上限
     }
}

>>一个示例

编译正确,

1
2
3
4
5
6
public  class  TestGeneric <T  extends  Comparable<?  super  T>>
{
     public  static  void  main(String[] args) {
         TestGeneric<GregorianCalendar> p =  null ;  // 编译正确
         }
}

<T extends Comparable<? super T>>,T表示任意字符名,extends对泛型上限进行了限制即T必须是Comparable<? super T>的子类,然后<? super T>表示Comparable<>中的类型下限为T。

去掉<? super T>则编译报错,

1
2
3
4
5
6
7
8
9
10
public  class  TestGeneric <T  extends  Comparable<T>>
{
     /**
      * <T extends Comparable<T>>相当于<GregorianCalendar extends Comparable<GregorianCalendar>>
      * 但是GregorianCalendar并没有实现Comparable<GregorianCalendar>而是实现的Comparable<Calendar>,这里不在限制范围之内
      */
     public  static  void  main(String[] args) {
         TestGeneric<GregorianCalendar> p =  null ;  // 编译错误
         }
}

目录
相关文章
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
530 10
|
安全 Java API
在Java中识别泛型信息
以上步骤和示例代码展示了怎样在Java中获取泛型类、泛型方法和泛型字段的类型参数信息。这些方法利用Java的反射API来绕过类型擦除的限制并访问运行时的类型信息。这对于在运行时进行类型安全的操作是很有帮助的,比如在创建类型安全的集合或者其他复杂数据结构时处理泛型。注意,过度使用反射可能会导致代码难以理解和维护,因此应该在确有必要时才使用反射来获取泛型信息。
404 11
|
存储 安全 Java
🌱Java零基础 - 泛型详解
【10月更文挑战第7天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
331 1
|
安全 Java 编译器
Java基础-泛型机制
Java基础-泛型机制
218 0
|
存储 Java 编译器
Java集合定义其泛型
Java集合定义其泛型
218 1
|
Java 语音技术 容器
java数据结构泛型
java数据结构泛型
316 5
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
227 2
|
Java
【Java】什么是泛型?什么是包装类
【Java】什么是泛型?什么是包装类
263 1
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
412 0
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
1038 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!