泛型

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.如果泛型类是一个接口或抽象类,则不可以创建泛型类的对象

JavaSE基础知识学习-----泛型相关推荐

  1. 《JavaSE 基础知识》泛型的基本介绍和应用。

    目录 一.泛型的基本介绍 1.传统方法存在的问题 2.泛型的基本介绍 3.泛型的语法 4.泛型的好处 二.自定义泛型 1.注意事项 2.自定义泛型方法 三.自定义泛型接口 四.泛型的继承和通配符 五. ...

  2. Javase基础知识总结

    今天11.25,我开始了第二天的写日记 我也开始了我的整理笔记 我希望我可以一直坚持下去 我不想为了未来的我后悔 加油 Javase基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我 ...

  3. 【JavaSE 基础知识盲点小结】

    [JavaSE 基础知识盲点小结] 一.第一天: 1. 在 cmd 命令窗口问题: ①编译是: javac HelloWorld.java ②运行时是: java HelloWorld (类名 不加 ...

  4. 面向对象-----6(javaSE基础知识完结篇)

    目录 解析面向对象 内存分析 三大特性.封装.继承.多态 接口 内部类 涉及知识目录总览: 资料来自于马士兵java笔记 这是javaSE基础知识的最后一篇笔记 1. 解析面向对象 返回目录 [1]面 ...

  5. 计算机二级二叉树基础知识,2017年计算机二级公共基础知识学习教程:树与二叉树...

    (六)树与二叉树 1.树的基本概念 树是一种简单的非线性结构.在树结构中,数据元素之间有着明显的层次结构.在树的图形表示中,用直线连接两端的结点,上端点为前件,下端点为后件. 在树结构中,每一个结点只 ...

  6. Python 基础知识学习笔记——NumPy

    Python基础知识学习笔记--NumPy 与 matlab 优秀的矩阵运算类似,python 提供了 numpy 库,这对熟悉 matlab 的用户来说非常友好.向量.矩阵和多维数组是数值计算中必不 ...

  7. Python 基础知识学习笔记——OpenCV(1)

    Python 基础知识学习笔记--OpenCV(1) OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,它轻量而且高效,被广泛的使用. 整理一下OpenCV学习笔记,以防忘记. 文章目录 Py ...

  8. Python基础知识学习笔记——Matplotlib绘图

    Python基础知识学习笔记--Matplotlib绘图 整理python笔记,以防忘记 文章目录 Python基础知识学习笔记--Matplotlib绘图 一.绘图和可视化 1.导入模块 2.一个简 ...

  9. python基础知识学习笔记(2)

    python基础知识学习笔记(2) 整理一下python基础知识,以防忘记 文章目录 python基础知识学习笔记(2) python简洁的一行代码 python简洁的一行代码 1.交换两个变量 # ...

最新文章

  1. 失败的Omni协议与继续前行的虫洞协议
  2. 安卓完全退出程序的六种方法(欢迎新手学习,大手指导)
  3. android简单服务器的搭建
  4. Animate.css
  5. sql server无法绑定由多个部分组成的标识符_HTML5服务器推送事件(Server-sent-event)...
  6. java 小数如何转换成百分数_初等数学33-百分数
  7. 多元高斯分布及多元条件高斯分布
  8. python ggplot为什么不能取代matplotlib_为什么geom_bar()不会像python ggplot中那样更改填充颜色?...
  9. 蜘蛛侠天堂,打死我mac键盘
  10. Java TCP实现文件传输
  11. 进销存excel_还在用Excel处理进销存?推荐4个免费库存管理软件
  12. teamtalk mysql.h_TeamTalk安装测试
  13. 大数据和云计算有什么关系?
  14. 物联网嵌入式——学习分享
  15. PgSql之操作JSON类型字段
  16. i3 1005g1和i5 10210u哪个好
  17. GitHub网站的主题设置
  18. Vim 批量在行首/行尾插入相同字符
  19. 跳跳虎辅助免费体验版
  20. QQ名称花体英文(可复制)

热门文章

  1. 华为5g鸿蒙折叠,华为5G折叠概念新机:内折叠+麒麟9000+鸿蒙OS 这才是华为的实力...
  2. 云信服务器代码,云信一键登录服务端API文档-一键登录-网易云信开发文档
  3. var lib mysql ib_MYSQL问题解决
  4. linux 重置网卡配置_Linux不进入网卡配置文件更改静态ip
  5. java其他进程,Java进程优先于其他Windows进程
  6. c语言 l l next,nexttowardl
  7. vue从url中获取token并加入到 请求头里_轻流amp;amp;企业微信——获取打卡数据...
  8. 梦见计算机房,梦见未来家里有机房是什么意思?
  9. 《软件需求分析(第二版)》第 16 章——需求链中的联系链 重点部分总结
  10. poj 1386 Play on Words(有向图欧拉回路)