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 // 编译错误
         }
}

目录
相关文章
|
9天前
|
JavaScript Java 编译器
Java包装类和泛型的知识点详解
Java包装类和泛型的知识点的深度理解
|
30天前
|
Java
java中的泛型类型擦除
java中的泛型类型擦除
13 2
|
1月前
|
存储 Java fastjson
Java泛型-4(类型擦除后如何获取泛型参数)
Java泛型-4(类型擦除后如何获取泛型参数)
33 1
|
8天前
|
存储 监控 安全
泛型魔法:解码Java中的类型参数
泛型魔法:解码Java中的类型参数
32 0
泛型魔法:解码Java中的类型参数
|
10天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
1月前
|
存储 安全 Java
JAVA泛型
JAVA泛型
12 0
|
1月前
|
Java 编译器
[java进阶]——泛型类、泛型方法、泛型接口、泛型的通配符
[java进阶]——泛型类、泛型方法、泛型接口、泛型的通配符
|
1月前
|
存储 Java 编译器
Java——泛型
Java——泛型
15 0
|
1月前
|
存储 安全 Java
JAVA的泛型
JAVA的泛型
9 0
|
2月前
|
算法 Java 编译器
重学Java之泛型的基本使用
重学Java之泛型的基本使用