JavaSE基础知识学习-----泛型

泛型

Java泛型是jdk1.5的一个新特性,jdk的性特性还包括:泛型,枚举,装箱和拆箱,可变参数等。这里先主要学习泛型。这些特性,现在都在广泛的使用。因为现在使用IDE编写代码,都是标准的代码提示,所以泛型也就变得理所应当,但还是应该学习记录一下。

泛型的声明

interface List和class 名称<K,V>,其中T,K,V代表的是类型。例如 List list = new ArrayList(); Inerator iterator = customers.iterator();

说明:T只能是类,不能是基本数据类型

为什么要有这个新特性

public static void main(String[] args) {List list = new ArrayList();list.add(12);list.add(23);list.add(45);list.add(65);list.add(new String("AA"));for(int i = 0 ; i < list.size(); i++){int age = (Integer)list.get(i);System.out.println(age);}
}
复制代码

上述代码就是用一个集合存储年龄,如果不使用泛型的话就是任何元素就都可添加到集合中,导致类型不安全,其次在遍历的时候需要强转,如果不小心在Integer类型的集合中放入一个String类型的,那么在遍历就会出现一个类型转换异常。 1.为了解决元素存储的安全性问题 2.解决获取数据元素时,需要类型强转的问题,例如 String类型的对象→集合Object类型对象→读取为Object对象→强转为String对象,集合使用Object类型会导致类型不安全,简单说就是任何元素都可以添加进去。

使用泛型

集合中使用泛型可以达到类型安全,读取出来的对象不需要强转,使得程序简单快捷。 同上的代码,如果集合的声明为:

List<String> list = new ArrayList<String>();
复制代码

使用泛型声明集合,就只能向集合添加相同类型的数据,在遍历的数据类型也是声明泛型的类型,不需要再强转。下面是使用泛型的一个例子。

public static void main(String[] args) {Map<String, Integer> map = new HashMap<String, Integer>();map.put("AA", 98);map.put("BB", 86);map.put("CC", 75);map.put("DD", 62);Set<Map.Entry<String, Integer>> set = map.entrySet();for(Map.Entry<String, Integer> o: set){System.out.println(o.getKey()+"===="+o.getValue());}
}
复制代码

List源码解释泛型

1.为什么List接口可以使用泛型,源码如下:

public interface List<E> extends Collection<E> {
复制代码

其中代表的就是泛型,再看里面的方法,

 boolean add(E e);E get(int index);
复制代码

其中的方法都是传入泛型的对象,得到的也是泛型的对象。

自定义泛型类,泛型方法

当实例化泛型类的对象时,明确指明泛型的类型,自定义泛型类的类中所有使用泛型的位置,都变成实例化中指定的泛型的类型。例如如下自定义泛型类:

public class TestGeneric<T> {private String name;private String sex;private T t;List<T> list = new ArrayList<>();public void add(){list.add(t);}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public T getT() {return t;}public void setT(T t) {this.t = t;}public static void main(String[] args) {TestGeneric<String> generic = new TestGeneric<String>();generic.setT("AA");generic.add();List<String> list = generic.list;System.out.println(list);}
}
复制代码

泛型的更多使用是为了代码的通用性。在使用jdbc编写查询数据的DAO就可以使用泛型来编写通用的父类DAO。让子类继承来决定类型。 对于集合类的泛型需要注意以下几点:

1.对象实例化不指定泛型,默认为Object
2.泛型不同的引用不能相互赋值
3.加入集合中的对象类型必须和指定的泛型类型保持一致
4.静态方法中不能使用泛型
5.如果泛型类是一个接口或抽象类,则不可以创建泛型类的对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7 校正linux系统时间_Linux系统:Centos7下搭建ClickHouse列式存储数据库

一、ClickHouse简介1、基础简介Yandex开源的数据分析的数据库&#xff0c;名字叫做ClickHouse&#xff0c;适合流式或批次入库的时序数据。ClickHouse不应该被用作通用数据库&#xff0c;而是作为超高性能的海量数据快速查询的分布式实时处理平台&#xff0c;在数据汇总查询方面…

html调用js页面显示不出来了,JS代码文件调用显示乱码,直接写在html页面的里可以调用,但是单独放在js文件里不能调用...

最近遇到了一个很奇怪的问题&#xff0c;就是在HTML网页代码里直接写JS代码可以正常运行的代码&#xff0c;使用JS文件调用就不行。var cities [ {"name" : "北京"}, {"name" : "上海"}, {"name" : "广州"} ];$(…

水系图一般在哪里找得到_城市供水系统防护体系的探索与思考

城市是一个国家或地区的政治、经济和文化中心&#xff0c; 在战争中常常被选为重点打击目标。1988年&#xff0c;时任美国空军司令部副参谋长助理的约翰A. 沃登上校提出“五环”目标打击理论&#xff0c;将 对敌打击目标分为五个层&#xff0c;其中就将基础设施列为第三层打击目…

Hadoop webHDFS设置和使用说明

原文&#xff1a;http://blog.csdn.net/iloveyin/article/details/28264027 ---------------------------------------------------------------------------------------- 1.配置 namenode的hdfs-site.xml是必须将dfs.webhdfs.enabled属性设置为true&#xff0c;否则就不能使…

CES 2017前瞻之AI:无人机依旧小巧,机器人主打家庭服务

再过2天&#xff0c;CES 2017就要开始了&#xff0c;根据这些已知晓的部分展商&#xff0c;我们也许能够看到未来的一些趋势。 还有2天&#xff0c;备受瞩目的CES 2017&#xff08;2017年国际消费类电子产品展览会&#xff09;就要拉开帷幕了。 每一年&#xff0c;CES上都会出…

ionic html5 上传图片,ionic4+angular7+cordova上传图片功能的实例代码

前言ionic是一个垮平台开发框架&#xff0c;可通过web技术开发出多平台的应用。但只建议开发简单应用。复杂的应用需要用到许多cordova插件&#xff0c;而cordova插件的更新或者移动平台的更新很可能导致插件的不可用&#xff0c;维护升级成本较高。安装插件安装插件Image Pick…

HDFS体系结构

Namenode 是整个文件系统的管理节点。它维护着整个文件系统的文件目录树&#xff0c;文件/目录的元信息metadate和每个文件对应的数据块列表。 功能&#xff1a;接收用户的操作请求。 metadate信息包括&#xff1a; 1、文件的owership和permission。 2、文件包含哪些block块…

为什么要将html页面和样式表分离,0031 如何使用css文件对网页内容和样式进行分离...

原标题&#xff1a;0031 如何使用css文件对网页内容和样式进行分离上节课&#xff0c;学习了针对文字可以设置很多种样式。这节课&#xff0c;学习如何将内容和样式进行分离。上节课的课后练习1.将斜体字体效果去除2.将工作经历和工作经验(部分)这2行文字也做成简介这行文字的效…

redis 关系数据库怎么转换 和_redis数据库设计(转)

阅读目录redis是什么redis就是一个存储key-value键值对的仓库&#xff0c;如何使用redis在于如何理解你需要设计的系统的E-R的模型&#xff0c;然后合理的规划redis的数据库结构场景我举一个简单的消息系统的例子&#xff0c;业务需求&#xff1a;服务器端发送消息给用户E-R模型…

Hadoop Archives

介绍 时间&#xff1a; Hadoop Archives (HAR files)是在0.18.0版本中引入的。 作用&#xff1a; 将hdfs里的小文件打包成一个文件&#xff0c;相当于windows的zip&#xff0c;rar。Linux的 tar等压缩文件。把多个文件打包一个文件。 意义&#xff1a; 它的出现就是为了缓…

js 判断日期时间差

2019独角兽企业重金招聘Python工程师标准>>> alert(GetDateDiff("2018-02-27 19:20:22","2018-02-27 09:20:22","hour"));function GetDateDiff(startTime, endTime, diffType) {//将xxxx-xx-xx的时间格式&#xff0c;转换为 xxxx/xx…

python 图形_Python图形数据

CSGraph代表 压缩稀疏图 &#xff0c;它着重于基于稀疏矩阵表示的快速图算法。 图表表示 首先&#xff0c;让我们了解一个稀疏图是什么以及它在图表示中的作用。 什么是稀疏图&#xff1f; 图形只是节点的集合&#xff0c;它们之间有链接。图表几乎可以代表任何事物 - 社交网络…

本地运行hadoop-Failed to locate the winutils binary in the hadoop binary path

转自&#xff1a;http://www.cnblogs.com/zq-inlook/p/4386216.html 之前在mac上调试hadoop程序&#xff08;mac之前配置过hadoop环境&#xff09;一直都是正常的。因为工作需要&#xff0c;需要在windows上先调试该程序&#xff0c;然后再转到linux下。程序运行的过程中&#…

dubbo 支持服务降级吗_dubbo面试题!会这些,说明你真正看懂了dubbo源码

整理了一些dubbo可能会被面试的面试题&#xff0c;感觉非常不错。如果你基本能回答说明你看懂了dubbo源码&#xff0c;对dubbo了解的足够全面。你可以尝试看能不能回答下。我们一起看下有哪些问题吧&#xff1f;dubbo中"读接口"和"写接口"有什么区别?谈谈…

不满足于汽车制造,丰田展示仿钢铁侠机器支撑腿架

而汽车制造商开发机器人也不是丰田一家的专利&#xff0c;此前现代也推出过类似的支撑机器人腿架 大多数人对于丰田的印象都停留在汽车制造上&#xff0c;不过他们却不仅仅满足于汽车事业的发展&#xff0c;最近&#xff0c;丰田正在研发一款机器人支撑腿架&#xff0c;来帮助…

js html异步加载的属性,异步加载JS的五种方式

方案一&#xff1a;点评&#xff1a;HTML5中新增的属性&#xff0c;Chrome、FF、IE9&IE9均支持(IE6~8不支持)。此外&#xff0c;这种方法不能保证脚本按顺序执行。方案二&#xff1a;点评&#xff1a;兼容所有浏览器。此外&#xff0c;这种方法可以确保所有设置defer属性的…

python中各操作符的优先级_Python3练习题系列(06)——各种符号总结

Python3中的各种符号总结 1关键字 import keyword print(keyword.kwlist, end\t) [False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, r…

hdfs java读写hdfs demo

windows环境配置&#xff1a; 1.下载winutils的windows版本 GitHub上&#xff0c;有人提供了winutils的windows的版本&#xff0c; 项目地址是&#xff1a;https://github.com/srccodes/hadoop-common-2.2.0-bin,直接下载此项目的zip包&#xff0c;下载后是文件名是hadoop-comm…

cesium 经纬度绘制点_NCL绘制2016年1号台风(Nepartak)

begin ncol 6 ;台风参数 nrow 31 ;时次总数 nbin 6 ;已知该该气旋共经历了6个等级的演变 ;读入台风资料 data asciiread("NEPARTAK.txt",(/nrow,ncol/),"integer") ;/31,6/ 31行6列&#xff0c;integer整数类型 ;;数据读取函数总结&…

VR究竟多奇幻?eSmart邀你共赴一场VR奇幻之旅!

今年夏天&#xff0c;快来参加首届eSmart展会&#xff0c;来一场VR游戏的奇妙之旅&#xff0c;见识最好玩、最有趣的VR游戏&#xff01; 正如十几年前互联网的兴起开创了全新时代一样&#xff0c;VR产业在近两年也势不可挡。随着一重行业巨头的进入&#xff0c;2016年&#xf…