最新要闻
- 环球微资讯!玩家期待已久!任天堂限定版Switch来了
- 全球今日报丨不拍蒜也断?张小泉斩骨刀斩骨时断裂 客服:与使用力度、角度有关
- 车被撞废人完好无损!比亚迪汉DM-i车主转头定了一台海豹
- 环球快资讯丨为何Redmi敢首发高通第二代骁龙7+?员工解释原因
- 男子驾车途中昏迷撞走公司大门 罪魁祸首竟是一只马蜂
- 全球看热讯:惠州治皮肤过敏较好的医院
- 天天即时看!广东佛山发生3.4级地震 广州有震感!你感受到没
- 环球微动态丨火狐良心!至少支持Win7/8.1到2024年第3季度
- 天天快看点丨质量堪忧 多批次行车记录仪抽检不合格 纽曼上黑榜
- 天天通讯!360版ChatGPT要来了!周鸿祎:大家给起个名字
- 焦点简讯:男子回应合成迪丽热巴视频来龙去脉:不想跟其他博主同质化
- 即时:钟薛高推出3.5元雪糕上市时间
- 头条:前搜狗CEO王小川成立人工智能公司:中国需要自己的OpenAI
- 观速讯丨美团回应限制大龄外卖骑手:入职年龄并未调整 能干到57岁
- 环球快报:经济学家林毅夫:AI可让人们享受生活 未来每周只工作一天
- 历史上首次!佳能将推可自动对焦的移轴镜头
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
java泛型和通配符
java泛型/通配符
泛型
- E - Element (在集合中使用,因为集合中存放的是元素)
- T - Type(表示Java 类,包括基本的类和我们自定义的类)
- K - Key(表示键,比如Map中的key)
- V - Value(表示值)
- N - Number(表示数值类型)
- ? - (表示不确定的java类型)
为什么会有泛型?
1.需要解决代码冗余,提高复用性
2.需要编译期的检查
(资料图)
编译期检查
ArrayList arrayList = new ArrayList<>(); arrayList.add(dog); arrayList.add(new Object());//编译器这里会报错
运行结果
java: 对于add(java.lang.Object), 找不到合适的方法
提高代码复用性
Dog
和 Cat
分别继承 Animal
/* void run(Dog t) { System.out.println(t); } void run(Cat t) { System.out.println(t); } void run(Animal t) { System.out.println(t); }*/void run(T t) { System.out.println(t);}
T
可以传入任意类型,和Object
一样,但一般都会给泛型一个界限,有助于编译期发现问题
//如果T 指定为Animal类型 则think.run(dog);think.run(cat);think.run(new Car());//编译期会报错think.run(new ArrayList<>());//编译期会报错
泛型使用
示例
测试类
package com.huke;import java.util.ArrayList;/** * Author:huke * DATE 2023/3/29 10:00 * 泛型 */public class GenericsTest { public static void main(String[] args) { GenericsTest genericsTest = new GenericsTest<>(); Dog dog = new Dog(); Cat cat = new Cat(); ArrayList arrayList = new ArrayList<>(); arrayList.add(dog); arrayList.add(cat); Think think = new Think<>(arrayList);//指定泛型T,V的界限 think.run(dog); think.run(cat); think.run(new Car());//编译期会报错 think.run(new ArrayList<>());//编译期会报错 }}
Think
类
package com.huke;import java.util.ArrayList;/** * Author:huke * DATE 2023/3/29 10:23 */public class Think { T t; V v; ArrayList arrayList; Think(ArrayList arrayList) { this.arrayList = arrayList; } void run() { this.arrayList.forEach(a -> System.out.println(a.toString())); } /* void run(Dog t) { System.out.println(t); } void run(Cat t) { System.out.println(t); } void run(Animal t) { System.out.println(t); }*/ void run(T t) { System.out.println(t); } }
泛型在创建对象时就必须确定,如果没有确定则会使用Object
public class WailCardTest { public static void main(String[] args) { WailCardTest
静态方法的泛型
//静态方法需要声明泛型 public static T playBall(T t, V v) { System.out.println("动物们玩球:t:" + t + ",v:" + v); return t; }
如果不指定无法通过编译期
// 报错:java: 无法从静态上下文中引用非静态 类型变量 Tpublic static T playBall(T t, V v) { System.out.println("动物们玩球:t:" + t + ",v:" + v); return t;}
静态方法 泛型使用需要方法泛型定义
主要原因
1.Java中的静态方法属于类级别,在类加载时加载进内存,普通方法是在类实例化时才被加载进内存,因此类级别无法访问任何实例变量或方法。对于泛型而言对象不创建泛型无法确认.而静态方法不需要实例化既可以访问
2.当静态方法使用泛型时,Java编译器无法推断出泛型类型,因为在编译时它不知道类被实例化时会传入哪种类型。因此,需要在方法上定义泛型,以便告诉编译器需要使用哪种类型,以便将泛型类型替换为实际类型
通配符
解决了什么问题?
1.使用泛型时难以选择具体类型
2.不希望使用Object类型
3.希望进行编译期检查
通配符使用
通配符不能作为参数入参只能作为引用参数
package com.huke;import java.util.ArrayList;/** * Author:huke * DATE 2023/3/29 15:04 * 通配符 */public class WailCardTest { public static void main(String[] args) { WailCardTest
输出
CatCarplay方法执行完毕!Cat---------arrayList[0]:CatCatCat
错误写法
void test(? t){//编译不通过}//可以改为void test(ArrayList> arrayList) { arrayList.forEach(System.out::println);}ArrayList> arrayList = new ArrayList<>();//这种写法arrayList.add(new Cat());//编译不通过//可以改为ArrayList super Animal> arrayList = new ArrayList<>();arrayList.add(new Cat());
pecs概念
pecs
全称是Producer Extends Consumer Super
使用extends确定上界的只能是生产者,只能往外生产东西,取出的就是上界类型。不能往里塞东西。
使用Super确定下界的只能做消费者,只能往里塞东西。取出的因为无法确定类型只能转成Object类型
- 用于灵活写入,主要目的是统一使用父类的容器,使得对象可以写入父类型的容器。或者用于比较,使得父类型的比较方法可以应用于子类对象。
- 用于灵活读取,使得方法可以读取 E 或 E 的任意子类型的容器对象。
示例
//上限private void showByExtends(ArrayList extends Animal> arrayList) { arrayList.forEach(System.out::println); //arrayList.add(new Cat()); //报错}//下限private void showBySuper(ArrayList super Animal> arrayList) { arrayList.forEach(System.out::println); System.out.println("---------"); arrayList.add(new Cat()); //不报错 Object object = arrayList.get(0); System.out.println("arrayList[0]:"+object);//但是取出来直接成为Object arrayList.forEach(System.out::println);}
泛型擦除
什么是泛型擦除?
泛型是个语法糖,只存在于编译器中。而不存在于虚拟机(JVM)中
编译阶段:编译器对带有泛型的java代码进行编译时,会去执行类型检查和类型推断,然后生成普通的不带泛型的字节码,供JVM接收并执行,此时泛型信息被擦除
示例
测试类
package com.huke;/** * Author:huke * DATE 2023/3/29 17:34 */public class GenericsDeleteTest { public static void main(String[] args) { Phone phone = new Phone<>(); phone.setT("绿色"); String color = phone.getT(); System.out.println(color); }}
Phone
package com.huke;/** * Author:huke * DATE 2023/3/29 17:35 */public class Phone { private T t; public T getT() { return t; } public void setT(T t) { this.t = t; }}
反编译字节码
public class com.huke.GenericsDeleteTest { public com.huke.GenericsDeleteTest(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: return public static void main(java.lang.String[]); Code: 0: new #2 // class com/huke/Phone 3: dup 4: invokespecial #3 // Method com/huke/Phone."":()V 7: astore_1 8: aload_1 9: ldc #4 // String 绿色 11: invokevirtual #5 // Method com/huke/Phone.setT:(Ljava/lang/Object;)V 14: aload_1 15: invokevirtual #6 // Method com/huke/Phone.getT:()Ljava/lang/Object; 18: checkcast #7 // class java/lang/String 21: astore_2 22: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream; 25: aload_2 26: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 29: return}
分析
11:开始将String类型转为Object15:get后得到Object类型18:检查类型时候可以转换,转为String
泛型和通配符的区别?
相同点
都可以接收未知参数,都可以指定类型界限
不同点
通配符
当设置泛型通配符上限的时候,只能读取不能写入
当设置泛型通配符下限的时候,可以写入,读取出来就是Object类型
泛型
可以对集合进行添加操作,因为调用泛型方法的时候,类型就已经确定了
关键词:
【天天快播报】记录--开局一张图,构建神奇的 CSS 效果
java泛型和通配符
环球微资讯!玩家期待已久!任天堂限定版Switch来了
全球今日报丨不拍蒜也断?张小泉斩骨刀斩骨时断裂 客服:与使用力度、角度有关
车被撞废人完好无损!比亚迪汉DM-i车主转头定了一台海豹
环球快资讯丨为何Redmi敢首发高通第二代骁龙7+?员工解释原因
男子驾车途中昏迷撞走公司大门 罪魁祸首竟是一只马蜂
全球看热讯:惠州治皮肤过敏较好的医院
全球微头条丨用 Go 剑指 Offer 07. 重建二叉树
快资讯:IDEA使用技巧和注册教程
全网最详细中英文ChatGPT-GPT-4示例文档-最强JS助手聊天机器人应用从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/
全球快看点丨下载安装MyAQL数据库8.0.30
NX二次开发:Checkmate例子根据dfa文件检查模型数据
天天即时看!广东佛山发生3.4级地震 广州有震感!你感受到没
环球微动态丨火狐良心!至少支持Win7/8.1到2024年第3季度
天天快看点丨质量堪忧 多批次行车记录仪抽检不合格 纽曼上黑榜
天天通讯!360版ChatGPT要来了!周鸿祎:大家给起个名字
焦点简讯:男子回应合成迪丽热巴视频来龙去脉:不想跟其他博主同质化
即时:钟薛高推出3.5元雪糕上市时间
MySQL的安装
世界资讯:python中函数的返回值详解
环球速读:关于Web的欢迎页面的开发设置
焦点热讯:Whats's New In Seata 1.6.x
环球短讯!Powerpoint教程_编程入门自学教程_菜鸟教程-免费教程分享
热点评!首批两只新能源领域REITs上市首日均收涨
头条:前搜狗CEO王小川成立人工智能公司:中国需要自己的OpenAI
观速讯丨美团回应限制大龄外卖骑手:入职年龄并未调整 能干到57岁
环球快报:经济学家林毅夫:AI可让人们享受生活 未来每周只工作一天
历史上首次!佳能将推可自动对焦的移轴镜头
全球热点!关注!有答复了,《关于加快发展文化创意产业,培育福鼎经济新亮点的建议》。
lmxcms代码审计学习
【天天播资讯】0功耗电子纸数字海报问世:不换画面不耗电
今日视点:30年大品牌 金邦2TB SSD到手549元:长寿TLC+PCIe 4.0性能
中国高铁首次出海!雅万高铁全线轨道铺通:最高时速350公里
每日报道:比亚迪汽车毛利率25.9%!李想夸赞:比特斯拉强太多
全球速递!俄亥俄河一载1400吨有毒物质驳船沉没:尚不清楚是否发生泄漏
世界报道:太极股份:截止2023年3月20日,公司的股东户数为36798户
Go语言:编写一个 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL。如果两个 URL 在 10 秒内都未返回结果
全球实时:一文带你搞懂如何优化慢SQL
焦点快报!Dijkstar-And-Astar算法
用上ChatGPT的这几个功能,你的开发效率不高都难
联想y400什么时候上市的?联想y400笔记本配置
地下城与勇士龙年套装哪个好?地下城与勇士龙年套装有几个宝珠?
HTCG28什么时候上市的?HTCG28手机参数
华为C8813Q如何装sim卡?华为C8813Q手机参数
gprs套餐费是什么意思?怎么关闭GPRS套餐?
楼市回暖背后:多城二手房在售量持续增加
环球关注:编写高质量c#代码的10个建议
环球即时看!插入排序
【世界速看料】【Visual Leak Detector】配置项 StackWalkMethod
环球新消息丨vivo将整合旗下iQOO手机:开启降本增效
王传福:比亚迪目标年底成为中国最大汽车制造商
全球热讯:全球最大游戏展危险了!世嘉、腾讯均宣布不参加本届E3
绿巨人前女友15年后回归漫威!《美国队长4》新剧照曝光:黑人美队现身
环球即时看!联名高达!ROG游戏手机7系列来了:二代骁龙8+6000mAh电池
全球视讯!中国代表敦促个别国家立即解除对叙利亚单边制裁
天天微动态丨KubeVela 1.7 版本解读:接管你的已有工作负载
焦点报道:接通率维持 66% 以上,为什么火山引擎 VeDI 能让企业智能外呼不再难?
【全球快播报】《Python编程快速上手—让繁琐工作自动化》实践项目答案:第四章
天天简讯:四方达(300179)3月28日主力资金净卖出861.62万元
微信QQ出现功能异常 官方紧急修复:微信支付等功能已恢复
天天速看:男子陵园祭祖车雷达显示全是人 网友:啥车?我想试试
PS主机神作好评仅有32%!顽皮狗回应《最后生还者》PC优化翻车
全球速读:专家谈ChatGPT:或让更多人享受生活 一周只工作一天
干货分享|袋鼠云数栈离线开发平台在小文件治理上的探索实践之路
全球热讯:电池级碳酸锂价格腰斩 电动车会降价吗?专家给出结论
环球速看:魔法氛围拉满!Redmi Note 12 Turbo哈利波特版图赏
不用带手机 抬手就能付!微信支付尝试推出微信刷掌服务
天天要闻:开发者危机!微软GitHub启动裁员:印度工程师团队几乎整体裁撤
全球微头条丨同款商超6元/瓶!特仑苏牛奶大促:2.93元/盒相当于半价
讯息:2023华大新高考联盟3月联考各科试题及答案!_老高考老教材
如何隐藏Apache版本号和其它敏感信息
容器安全之 Dockerfile 安全扫描
zookeeper的Leader选举源码解析
焦点要闻:前端设计模式——享元模式
每日观察!使用NSIS打包超大型软件的几个注意事项
环球头条:【手慢无】速来占便宜!三星128GB存储卡仅需49.8元
全球热头条丨汽车雷达在无人陵园内显示全是人影:吓坏车主
985硕士男子失业半年 应聘道士35岁已超龄!做实习生都被拒:现送外卖
没污染!国内首款氢内燃机飞机成功首飞:中国自研
环球新资讯:内地特供的网游性价比神U!酷睿i7-13790F评测:游戏性能强于锐龙9 7950X
环球播报:海豚模拟器登陆Steam
全球实时:半场战报:踢疯了!梅西第38分钟戴帽 阿根廷5-0暂领先库拉索
环球热推荐:Epic独占结束!中国功夫游戏《师父》登陆Steam:139元起
【天天时快讯】Native开发过程中容易忽略的注意事项
全球快播:【国际大宗商品早报】美豆反弹收涨近2% 伊拉克库尔德地区原油出口停顿支撑油价续涨
全固态电池空间电荷层微观机理揭示
环球要闻:核心、显存砍得没法看!RTX 4060 Ti/4060要5月上市:3999元起超值?
天天播报:大作《生化危机4重制版》发售 采用Denuvo正版加密 黑客发声:准备出手破解
天天快看点丨任天堂《塞尔达传说:王国之泪》限定版Switch发布!金黄手柄太酷炫
短讯!《最后生还者》PC版多半差评
每日消息!读SQL进阶教程笔记01_CASE表达式
快讯:成年子女不能与父母在酒店住同一标间引热议 太没道理?酒店回应
Spring整合Mybatis遇到的问题(一)
有关Mongodb 在windows上安装的问题
今头条!JNI知识点总结
天天日报丨【Visual Leak Detector】配置项 ReportTo
【Visual Leak Detector】配置项 SelfTest
环球观察:4个多月第一次!Intel Arc Pro专业显卡终于有了新驱动
当前最新:小米“退钱”了:27万小米空气净化器初代用户 每人899元