java数组的下界,Java泛型_上界extends_下界super
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相关推荐
- java泛型的上界和下界_java泛型中的上界(extend)和下界(super)
泛型中上界和下界的定义 上界 extend Fruit> 下界 super Apple> 上界和下界的特点 上界的list只能get,不能add(确切地说不能add出除null之外的对象, ...
- java 泛型的上界和下界
1.上界 Java 泛型的上界用于限制泛型类型参数必须是某个类型的子类型,通常使用 extends 关键字来表示.下面是一个示例代码,其中 T 的上界是 Comparable<T>,表示 ...
- java数组可以包含对象吗_数组可以包含对象类型的元素吗_对象数组
对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组就行了. 怎样声明包含 5 个元素的对象数组,每个元素都是 Employee 类型的对象 浏览次数:4875 bill ...
- JAVA数组首位末位互换_数组元素前移,第一个元素放置数组末位
看起来so sasy,slice截取,concat拼接到末尾. 就像这样: var arr = [1,2,3];var newArr = arr.slice(1).concat(arr.slice(0 ...
- java 数组传递是引用吗_数组是通过值传递还是通过Java引用传递?
本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: Is Java"pass-by-reference"? 数组不是Java中的原始类型,但它们也不是对 ...
- java数组分离奇数和偶数_以最小的时间复杂度分离偶数和奇数
java数组分离奇数和偶数 Problem statement: 问题陈述: Given an array of integers. Write a function to segregate the ...
- java数组越界异常并捕获_(Java)数组越界异常
所以,我一直在为我的计算机科学课程编写一些代码来计算热指数.我有麻烦加载数据从文本文件,我被指示与该程序将要使用的数组一起工作.你看到的块被注释掉了,这是我正在尝试的另一个解决方案,它也不能工作... ...
- mongodb java数组_MongoDB 基础java数据类型
mongodb的java数据类型有 Object Ids 自动ID Regular Expressions 正则表达式搜索记录 Dates/Times 时间 Database References 数 ...
- java创建集合有的不用泛型_为什么在Java泛型右手边的集合类型没有任何影响?...
使用Java的Generics功能我创建了一个List对象,在左侧我使用的是原始类型List,在右侧我使用的是泛型类型ArrayList. List myList=new ArrayList(); 我 ...
最新文章
- yolov3(三:算法框架解析)
- 【软件工程-Teamwork 3】团队角色分配和团队贡献分分配规则
- 云计算网络基础第八天
- wordpress Oops! That page can’t be found.
- HDU - 3571 HDU CakeMan(bfs+最短路必经点)
- linux 内存泄漏 定位,一种内存泄露检查和定位的方法
- St_geometry 初始用
- 如何运用大数据进行信贷审批?
- 基于Java毕业设计医院诊疗信息管理源码+系统+mysql+lw文档+部署软件
- 清华技术经理自学Python全栈的从业笔记,欢迎收藏
- MATLAB代码美化器
- 玩和平精英跟刺激战场国际服都被吊打?网友:你还可以玩荒野行动
- java实现12306查票_java抓取12306信息实现火车余票查询示例
- CASE WHEN THEN 判断
- Android Bmob后端云简单使用-增删改查
- 富士胶片3月底完成日立影像诊断业务收购;中国癌症早筛第一股诺辉健康登陆港交所 | 美通企业日报...
- IDEA新建项目配置tomcat
- SSM手动、自动切换多数据源
- iOS CAAnimation 详解
- 联想t450怎么重置计算机,韩博士教你联想t450s如何一键安装win10
热门文章
- Flutter 错误:The method ‘>‘ was called on null
- Flyback的Cross Regulation
- ElasticSearch——手写一个ElasticSearch分词器(附源码)
- c语言怎样画坐标轴,c语言 用小星星画各种图形(菜鸟学C语言)
- Nutch学习——读源码 Crawl.java
- 2022年CPA财务成本管理-资产定价专题(Asset Pricing)【3月22开始15天15考点刷题】【完结】
- 拉勾网认证企业信息采集
- 词霸天下---词根294【-firm- 坚固,固定】
- 48个值得推荐的免费英文有声读物网站
- CentOS7下使用ngrok搭建内网穿透服务器