java实用技巧---泛型
泛型:把明确数据类型的工作,提前到了编译时期,在创建集合的时候明确存储元素的数据类型。这样的做法有点向把数据类型当作参数一样传递,所以泛型还有一个叫法:参数化类型泛型的语句定义格式:<引用数据类型>注意:尖括号中的数据类型只能是引用数据类型泛型的好处:1、将我们运行时期出现的问题,提前到编译时期2、不需要做强制类型转换3、优化了代码。消除了不必要的黄色警告线,使代码看起来更简洁通过观察API发现,泛型可以出现在类,接口,方法上面,我们看到的类似于<E>这样的都叫泛型,一般来说,泛型出现大多使用的集合中。public class GenericDemo {public static void main(String[] args) {//创建一个List集合对象//在JDK1.7之后,泛型会进行自动类型推断ArrayList<String> list = new ArrayList<>();//向集合中添加元素list.add("hello");list.add("hello");list.add("hello");list.add("hello");list.add("hello"); // list.add(20); // list.add(12.34); // list.add(new Student());//遍历 // Iterator iterator = list.iterator(); // while (iterator.hasNext()) { // Object next = iterator.next(); // // String s = (String) next; //ClassCastException // // System.out.println(next); // }//遍历Iterator<String> iterator = list.iterator();while (iterator.hasNext()){String next = iterator.next();System.out.println(next);}} }
泛型通配符<?>任意类型,如果没有明确,那么就是Object以及任意的Java类了 ? extends E向下限定,E及其子类 ? super E向上限定,E及其父类public class GenericDemo1 {public static void main(String[] args) {ArrayList<Animal> list1 = new ArrayList<Animal>();ArrayList<Dog> list2 = new ArrayList<Dog>();ArrayList<Object> list3 = new ArrayList<Object>();//泛型通配符<?>//任意类型,如果没有明确,那么就是Object以及任意的Java类了ArrayList<?> list4 = new ArrayList<Animal>();ArrayList<?> list5 = new ArrayList<Dog>();ArrayList<?> list6 = new ArrayList<Object>();//? extends E 向下限定,E及其子类ArrayList<? extends Animal> list7 = new ArrayList<Animal>();ArrayList<? extends Animal> list8 = new ArrayList<Dog>();ArrayList<? extends Animal> list9 = new ArrayList<Cat>(); // object为animal的父类 ArrayList<? extends Animal> lis10 = new ArrayList<Object>();//? super E 向上限定,E及其父类ArrayList<? super Animal> list11 = new ArrayList<Animal>();ArrayList<? super Animal> list13 = new ArrayList<Object>(); // ArrayList<? super Animal> list12 = new ArrayList<Dog>();} }
泛型类把泛型定义在类上格式:public class 类名<泛型类型1,…>注意:泛型类型必须是引用类型 这里的<>里面的内容仅仅表示的使一种参数数据类型,参数类型是一种变量 既然是一种变量,就要符合变量的命名规则,可以使任意符合标识符起名字规则的名字。一般情况下,在定义的时候,习惯用一个大写字母表示。public class GenericTool1<T> {private T obj;public T getObj(){return obj;}public void setObj(T obj){this.obj = obj;}}
泛型方法把泛型定义在方法上格式:public <泛型类型> 返回类型 方法名(泛型类型 .)public class GenericTool2 { // public void show(String s){ // System.out.println(s); // } // // public void show(int i){ // System.out.println(i); // } // // public void show(double d){ // System.out.println(d); // }//用泛型方法改进,将来不确定要传入什么类型的数据public <F> void show(F f){System.out.println(f);}} /*泛型类的测试*/ public class GenericTest1 {public static void main(String[] args) {//如果不加泛型,默认使Object类型(创建对象调用方法) // GenericTool1 gt1 = new GenericTool1(); // gt1.setObj("hello"); // gt1.setObj(20); // gt1.setObj(12.34);GenericTool1<String> gt2 = new GenericTool1<>();gt2.setObj("hello"); // gt2.setObj(20);String obj = gt2.getObj();} } 用泛型改后的代码测试 public class GenericTest2 {public static void main(String[] args) {GenericTool2 genericTool2 = new GenericTool2();genericTool2.show("hello");genericTool2.show(10);genericTool2.show(12.34);} }
java实用技巧---泛型相关推荐
- 一些Java实用技巧(量变转变为质变后会单独整理出来)
[Java包]------------------------------------ Collection 接口是 List.Set 和 Queue 接口的父接口,通常情况下不被直接使用. [jav ...
- java swing总结,Java 实用经验总结 Swing 篇
Java 实用经验总结 Swing 篇 Java 实用经验总结 --Swing 篇 前言 本文前言部分为我的一些感想,如果你只对本文介绍的 Java 实用技巧感兴趣,可以跳过前言直接看正文的内容. 本 ...
- Java 8 - 日期和时间实用技巧
Java 8 – 日期和时间实用技巧 当你开始使用Java操作日期和时间的时候,会有一些棘手.你也许会通过System.currentTimeMillis() 来返回1970年1月1日到今天的毫秒数. ...
- Java 性能调优的 11 个实用技巧
大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情.这 ...
- java的wwe怎么玩_WWE2K18新手实用技巧介绍 WWE2K18新手怎么玩?-游侠网
WWE2K18新手怎么玩?对于新手玩家来说,这代的游戏确实比较难,但这个难度并不是游戏内整体AI智能度的提高,而是因为设计的不平衡而导致的.接下来就为大家带来WWE2K18新手实用技巧介绍,刚刚入手的 ...
- 偏执却管用的 10 条 Java 编程技巧
经过一段时间的编码(咦,我已经经历了将近20年的编程生涯,快乐的日子总是过得很快),我们开始感谢那些好习惯.因为,你知道- "任何可能出错的事情,最后都会出错." 这就是人们为什么 ...
- Java 编程技巧之数据结构
Photo @markusspiske 文 | 常意 导读 唐宋八大家之一欧阳修在<卖油翁>中写道: 翁取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿.因曰:"我 ...
- 敲代码就是一把梭_2020必看!开发五年的大佬日常工作中所使用的java代码技巧...
前言 罗列工作中实际使用的一些代码技巧或者叫工具类;知识无大小,希望大家都有收获 实用技巧 rpc服务出参统一化 什么,出参统一化有什么好说的????? 我不知道你们有没有遇到过多少五花八门的外部服务 ...
- Vim 实用技术,第 1 部分: 实用技巧
0. Vim 简介 作为开源世界最重要的编辑器之一(另一个是 Emacs),Vim 以其强大的功能和可定制能力被众多开发者所喜爱.不过,也许就是因为 Vim 的功能太强大了,要真正用好 Vim 并不容 ...
最新文章
- 每年颁发两个图灵奖?
- 深度学习——你需要了解的八大开源框架
- 大总结-深度学习全五课-Stanford吴恩达教授
- windows server 2012 远程连不上_CVE20201350 | Windows DNS Server远程代码执行漏洞通告
- 2016.8.1今天是建军节
- C语言创建一个节点Node(附完整源码)
- J storm战队成员_DOTA2J.Storm战队介绍-DOTA2ESL孟买站预选赛J.Storm战队介绍_牛游戏网攻略...
- 牛客网【每日一题】 合集
- [原][歌曲]感动的歌曲排序
- 如何命令行结束react程序_想要成为前端Star 吗?一首歌时间将React / Vue 应用Docker 化...
- 信息学奥赛一本通(1203:扩号匹配问题)
- Django有办法打开HTTP长轮询连接吗?
- php中加载图片淡入淡出,jQuery做出图片滚动淡入淡出
- 尚硅谷大数据开发Day03
- 登记车架号/VIN码用车架号识别
- linux怎么添加跃点数,Windows 7修改静态路由表的跃点数
- canvas用于绘制视频
- 重装系统 linux启动windows系统文件,重装Windows系统后,Linux系统启动引导失败
- UEFI BIOS setup菜单之页面隐藏的方法
- 系统弱密码检查John
热门文章
- HDU - 5009 Paint Pearls dp + 链表 + 下界优化
- lego let‘s encrypt 证书
- 天地图一,加载天地图。
- Python操作visio画图
- 国标行政区划(五级)编码:省级、地级、县级、乡级和村级 sql文件
- matlab的ln函数表示,r软件中ln函数 r语言ln函数
- SpringMVC---共享域对象数据
- 【SpringBoot】33、SpringBoot+LayUI后台管理系统开发脚手架
- 基于SSM框架图书管理系统开发与设计(附源码资料)-毕业设计
- 在html5中居中如何定义,html上下居中代码怎么写