`
liyixing1
  • 浏览: 959066 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

泛型的上届和下届 extends super

 
阅读更多
上界:
上界用extends关键字声明,表示参数化的类型可能是所指定的类型,或者是此类型的子类。如下面的代码:

出错的情况
Map<String, ? extends Object> map = new HashMap<String, Object>();

map.put("aaaa", "aaaaaa");

这里会出错,是因为extends关键字声明,表示参数化的类型可能是所指定的类型,或者是此类型的子类。因此,实际的map对象的value类型,可能是Integer String Long 等等。而实际的map变量的value类型是不可预测的。假设实际的map的value类型是Integer,那么不就有问题了,因为万一是Integer的话,它无法存入String的。因此在编译器就报错了。


下界
下界用super进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object。如下面的

Map<String, ? super Object> map = new HashMap<String, Object>();

map.put("aaaa", "aaaaaa");

这个时候就不会抱错了。

因为这个时候的value泛型类型可能是Object或者Object的父类,因此,你传String进去,肯定能包容这个value。


下界
下界用super进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object。如下面的代码:


Map<String, ? super String> map = new HashMap<String, String>();

map.put("aaaa",new Object());
依然抱错。
原因类型,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object。既然可能是指定类型的父类,理论上应该可以put父类,但是别忘了,如果实际的泛型类型是String,String x = new Object();(这句就肯定编译不成功),Object它不是String类型,自然不能put进去。
分享到:
评论
1 楼 我改名了 2012-01-11  
so  ga  ..

相关推荐

    泛型中extends和super的区别Java系列2021.pdf

    泛型中extends和super的区别Java系列2021.pdf 在Java中,extends和super是两个重要的泛型通配符,它们用于限制类型参数的范围。了解它们的区别非常重要,否则可能会导致编程错误。 extends关键字 在泛型中,...

    Java泛型三篇文章,让你彻底理解泛型(super ,extend等区别)

    在 Java 泛型中,extends 和 super 是两个重要的关键字,它们分别用于限定类型的上界和下界。 extends 用于限定类型的上界,表示参数化类型可能是 T 或 T 的子类。例如: List&lt;? extends Fruit&gt; flist = new ...

    Java泛型extends及super区别实例解析

    Java泛型extends及super区别实例解析 Java泛型中的通配符(Wildcards)和边界(Bounds)是两个重要的概念,分别由 &lt;? extends T&gt; 和 &lt;? super T&gt; представляют。这些概念的出现是为了解决泛型中的一些...

    Java 泛型 super T 中 super 怎么 理解?与 extends 有何不同? - 副本.md

    Java 泛型 super T 中 super 怎么 理解?与 extends 有何不同? - 副本

    泛型中? super T和? extends T的区别

    经常发现有List&lt;? super T&gt;、Set&lt;? extends T&gt;的声明,是什么意思呢?&lt;? super T&gt;表示包括T在内的任何T的父类,&lt;? extends T&gt;表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。

    泛型学习和泛型接口和泛型经典示例

    泛型学习和泛型接口和泛型经典示例

    java泛型类和函数

    - **上限和下限**:可以通过`extends`和`super`关键字指定泛型的上限和下限。例如,`List&lt;? extends Number&gt;`表示该列表可以接受任何`Number`子类型的元素。 - **非原始类型的泛型**:不能使用原始类型如`int`作为...

    Java泛型中? super T和? extends T的区别

    super T&gt;、Set&lt;? extends T&gt;的声明,是什么意思呢?&lt;? super T&gt;表示包括T在内的任何T的父类,&lt;? extends T&gt;表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。  extends  List&...

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    在C#编程中,泛型是一种强大的工具,它允许我们编写可重用的代码,同时保持类型安全性和高效性。本文将深入探讨泛型类、泛型方法、泛型接口和泛型委托,并通过实例来阐述它们的应用。 首先,我们来看泛型类。泛型类...

    泛型dao 泛型dao 泛型dao

    泛型dao接口 :GenericDao, ID extends Serializable&gt; 泛型作为DAO的通用接口 CRUD方法 dao接口 : PersonDAO extends GenericDao, Integer&gt; 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 ...

    泛型java的泛型知识,非常有用

    泛型允许我们在类、接口和方法中使用类型参数,这样在编译时期就能检查类型匹配,减少运行时类型转换异常。 1. **泛型的基本概念** - 泛型的本质是在类、接口或方法中使用类型参数,让它们能够处理多种数据类型。...

    Java泛型extends关键字设置边界的实现

    "Java泛型extends关键字设置边界的实现" Java泛型extends关键字设置边界的实现是Java泛型系统中的一个重要概念。它允许开发者在泛型定义中指定类型参数的边界,从而限制了类型参数可以接受的类型范围。这种机制可以...

    C++泛型编程和设计模式应用

    《C++泛型编程和设计模式应用》是Addison Wesley出版社推出的一本深入探讨C++编程技术的专业书籍,主要关注两个关键领域:泛型编程和设计模式。这本书旨在帮助开发者提高代码的重用性、灵活性和效率,通过利用C++...

    泛型和方法

    在Java编程语言中,泛型(Generics)和方法是两个重要的概念,它们极大地提高了代码的类型安全性和可重用性。这篇博文将探讨这两个主题,并结合源码和工具进行深入解析。 首先,泛型是Java 5引入的一项重要特性,它...

    [Java泛型和集合].

    Java泛型和集合是Java编程语言中的核心特性,它们极大地提高了代码的类型安全性和可读性,同时也简化了集合操作。本资料主要基于Maurice Naftalin和Philip Wadler合著的《Java泛型和集合》进行讨论。 首先,我们要...

    关于java基础的泛型的练习

    Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全性和可读性。泛型在编程中的应用广泛,特别是在集合框架中,使得我们可以在编译时就检查类型,避免了不必要的类型转换,并且提高了代码的...

Global site tag (gtag.js) - Google Analytics