Java泛型_上界extends_下界super

? 通配符类型

extends T> 表示类型的上界,表示参数化类型的可能是T或是T的子类

super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型(T)的超类型(父类型),直至Object

当使用 Upper Bound 的通配符时

如下代码,

/**

* 代码中通配符> 是  extends Object> 的简写

*

* @param list

*/

public static void test(List> list) {

Object e = list.get(0); // get OK

// list.set(0, e);         // set 编译报错

list.set(0, new Integer(1)); //编译报错

}

set报错的原因是因为此时方法中的类型是不可具体化的,你可以传递一个String,Number,Book,等任何继承自Object的类作为List的参数类型给test方法,

而list要求集合中的类型必须是一致的,set的时候没有办法保证set进去的数据类型是否和list中原本的类型一致,比如你传给test方法的是 List, 那么在方法中set进去一个Object显然类型就不一致了。这也是通配符带来灵活性的同时所要付出的代价。

结论:使用了 extends T> 这样的通配符,test方法的参数list变成了只能get不能set(除了null) 或者不严谨的说它变成了只读参数了, 有些类似一个生产者,只提供数据。

当使用 Lower Bound 的通配符时

/**

* list 是一个列表

* 列表元素全部必须是Number的超类型(父类型),直至Object(不包含Object)

*

* @param list

*/

public static void test(List super Number> list) {

Number n = list.get(0);             // 编译错误

Object o = list.get(0);             // OK

list.set(0, new Object());          // 编译错误

Number number = new Integer(0);

list.set(0, number);                // OK

list.set(0, new Long(0));           // OK

list.set(0, new Integer(0));        // OK

}

List super Number> 表示“列表中包含的元素的类型是Number的超类型”,列表的类型至少是一个Number类型,因此可以安全的向其中添加Number及其子类型。List super Number>中的类型可能是任何Number的超类型。

============END============

java数组的下界,Java泛型_上界extends_下界super相关推荐

  1. java泛型的上界和下界_java泛型中的上界(extend)和下界(super)

    泛型中上界和下界的定义 上界 extend Fruit> 下界 super Apple> 上界和下界的特点 上界的list只能get,不能add(确切地说不能add出除null之外的对象, ...

  2. java 泛型的上界和下界

    1.上界 Java 泛型的上界用于限制泛型类型参数必须是某个类型的子类型,通常使用 extends 关键字来表示.下面是一个示例代码,其中 T 的上界是 Comparable<T>,表示 ...

  3. java数组可以包含对象吗_数组可以包含对象类型的元素吗_对象数组

    对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组就行了. 怎样声明包含 5 个元素的对象数组,每个元素都是 Employee 类型的对象 浏览次数:4875 bill ...

  4. JAVA数组首位末位互换_数组元素前移,第一个元素放置数组末位

    看起来so sasy,slice截取,concat拼接到末尾. 就像这样: var arr = [1,2,3];var newArr = arr.slice(1).concat(arr.slice(0 ...

  5. java 数组传递是引用吗_数组是通过值传递还是通过Java引用传递?

    本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: Is Java"pass-by-reference"? 数组不是Java中的原始类型,但它们也不是对 ...

  6. java数组分离奇数和偶数_以最小的时间复杂度分离偶数和奇数

    java数组分离奇数和偶数 Problem statement: 问题陈述: Given an array of integers. Write a function to segregate the ...

  7. java数组越界异常并捕获_(Java)数组越界异常

    所以,我一直在为我的计算机科学课程编写一些代码来计算热指数.我有麻烦加载数据从文本文件,我被指示与该程序将要使用的数组一起工作.你看到的块被注释掉了,这是我正在尝试的另一个解决方案,它也不能工作... ...

  8. mongodb java数组_MongoDB 基础java数据类型

    mongodb的java数据类型有 Object Ids 自动ID Regular Expressions 正则表达式搜索记录 Dates/Times 时间 Database References 数 ...

  9. java创建集合有的不用泛型_为什么在Java泛型右手边的集合类型没有任何影响?...

    使用Java的Generics功能我创建了一个List对象,在左侧我使用的是原始类型List,在右侧我使用的是泛型类型ArrayList. List myList=new ArrayList(); 我 ...

最新文章

  1. yolov3(三:算法框架解析)
  2. 【软件工程-Teamwork 3】团队角色分配和团队贡献分分配规则
  3. 云计算网络基础第八天
  4. wordpress Oops! That page can’t be found.
  5. HDU - 3571 HDU CakeMan(bfs+最短路必经点)
  6. linux 内存泄漏 定位,一种内存泄露检查和定位的方法
  7. St_geometry 初始用
  8. 如何运用大数据进行信贷审批?
  9. 基于Java毕业设计医院诊疗信息管理源码+系统+mysql+lw文档+部署软件
  10. 清华技术经理自学Python全栈的从业笔记,欢迎收藏
  11. MATLAB代码美化器
  12. 玩和平精英跟刺激战场国际服都被吊打?网友:你还可以玩荒野行动
  13. java实现12306查票_java抓取12306信息实现火车余票查询示例
  14. CASE WHEN THEN 判断
  15. Android Bmob后端云简单使用-增删改查
  16. 富士胶片3月底完成日立影像诊断业务收购;中国癌症早筛第一股诺辉健康登陆港交所 | 美通企业日报...
  17. IDEA新建项目配置tomcat
  18. SSM手动、自动切换多数据源
  19. iOS CAAnimation 详解
  20. 联想t450怎么重置计算机,韩博士教你联想t450s如何一键安装win10

热门文章

  1. Flutter 错误:The method ‘>‘ was called on null
  2. Flyback的Cross Regulation
  3. ElasticSearch——手写一个ElasticSearch分词器(附源码)
  4. c语言怎样画坐标轴,c语言 用小星星画各种图形(菜鸟学C语言)
  5. Nutch学习——读源码 Crawl.java
  6. 2022年CPA财务成本管理-资产定价专题(Asset Pricing)【3月22开始15天15考点刷题】【完结】
  7. 拉勾网认证企业信息采集
  8. 词霸天下---词根294【-firm- 坚固,固定】
  9. 48个值得推荐的免费英文有声读物网站
  10. CentOS7下使用ngrok搭建内网穿透服务器