泛型的引入和体现:

问题:集合中能够存储各种类型的元素,可是由于集合能够存储各种类型数据。在获取集合中元素时,就会造成数据不安全。

public class GenericDemo {

	public static void main(String []str)
{
List list = new ArrayList();
list.add(10);//自己主动装箱
list.add(new Integer(100));
list.add(Integer.valueOf(1000)); for(Object obj:list)
System.out.println(obj);
} }

在开发中,能够会发生一种情况:用户输入了一个数据并存储到集合中。可是用户可能输入String类型的数据

public static void main(String []str)
{
List list = new ArrayList();
list.add("10");
list.add(new Integer(100));
list.add(Integer.valueOf(1000)); for(Object obj:list)
{
Integer num = (Integer)obj;
System.out.println(num);
} }

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

    at cn.itcast.test.GenericDemo.main(GenericDemo.java:17)

解决方式:能够使用instanceofkeyword避免ClassCastException异常

在JDK1.5后。出现了一种新的解决方式:泛型

思考:假设集合中仅仅能存储一个类型的元素,还会出现获取数据时不安全的问题吗?

 实现方式:在定义集合时明白了该集合中能够存储元素的类型

泛型的使用格式:   <引用类型>    注意:泛型中仅仅能使用引用类型

package org.test;

import java.util.ArrayList;
import java.util.List; public class TestGeneric {
public static void main(String[] args) {
//自己定义泛型类的使用
//1.实例化泛型类的对象时指明泛型的类型,这儿不能一般类型,仅仅能是引用类型
//全部使用了泛型类型的地方。都要变成泛型类的类型
//2.假设不指明类型,默认是Object类型
order<Integer> o = new order<Integer>(); //order oo = new order();//假设不指定泛型的类型,默认是Object类型 List<Integer>list = o.getList();
list.add(10);
list.add(11); System.out.println(o.getList()); Integer i = o.getE(100);
System.out.println(i);
} } class order<T>
{
int MaxSize = 30;
//public T []t = new T[MaxSize]; 没有泛型数组
private T t;
private List<T> list = new ArrayList<T>(); public List<T> getList()
{
return list;
}
//声明泛型方法 <E>一定要在权限修饰符后面。不能缺少
public <E> E getE(E e)
{
return e;
} }
//子类还是不确定类型T ,实例化子类的对象时候要指明泛型的引用类型 //继承泛型类或泛型接口时,能够指明泛型的类型 class SubOrder<Integer> extends order<Integer>
class SubOrder <T>extends order<T>
{ }

泛型的优点?

1,  攻克了集合中存储数据的不安全性

2,  把执行时可能发生的异常,放在编译时作为编译错误处理了,避免了执行时的异常

3。  省略了代码中的强制类型转换的书写

@Test
public void Demo2()
{
List<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(new Integer(100));
list.add(Integer.valueOf(1000)); //使用迭代器遍历集合。在迭代器中明白要迭代的类型
for (Iterator<Integer> it = list.iterator(); it.hasNext();) {
//由于迭代器明白了要迭代的类型。所以不须要强制类型转换
//Integer num = (Integer)it.next();
//不须要强制类型转换
Integer num = it.next();
System.out.println(num);
}
//使用foreach遍历集合
//由于list集合中明白了集合的类型,所以在foreach中能够直接声明为集合中的元素类型,而不是之前的Object
for(Integer i:list)
{
System.out.println(i);
} }

Day14 自己定义泛型类的使用的更多相关文章

  1. Java开发笔记(六十九)泛型类的定义及其运用

    前面从泛型方法的用法介绍到了泛型的起源,既然单个方法允许拥有泛化的参数类型,那么一个类也应当支持类级别的泛化类型,例如各种容器类型ArrayList.HashMap等等.一旦某个类的定义代码在类名称后 ...

  2. Java分享笔记:泛型类的定义与使用

    当类中要操作的引用数据类型不确定时,可以定义泛型类完成扩展.下面是程序演示. package packB; class Student { //定义学生类 public String st = &qu ...

  3. java 泛型 -- 泛型类,泛型接口,泛型方法

    泛型T泛型的许多最佳例子都来自集合框架,因为泛型让您在保存在集合中的元素上指定类型约束.在定义泛型类或声明泛型类的变量时,使用尖括号来指定形式类型参数.形式类型参数与实际类型参数之间的关系类似于形式方 ...

  4. Android(java)学习笔记90:泛型类的概述和使用

    用法一: 下面我们首先定义泛型类: package cn.itcast_04; /* * 泛型类:把泛型定义在类上 */ public class ObjectTool<T> { //这里 ...

  5. 泛型类、Map集合

    ————泛型: JDK1.5之后出现的新特性:用于解决安全问题,是一个类型安全机制. 好处: 1.将运行时期出现的问题ClassCastException ,转移到了编译时期,方便于程序员解决问题,让 ...

  6. Java基础----Java---集合框架---泛型、泛型方法、静态方法泛型、泛型接口、泛型限定、泛型类

    泛型:jdk1.5后的新特性,用于解决安全问题,是一个安全机制. 好处: 1.将运行时的异常出现问题classcastException.转移到了编译时期.方便程序员调试解决问题,让运行事情问题减少, ...

  7. JAVA之旅(二十一)——泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符

    JAVA之旅(二十一)--泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符 不知不觉JAVA之旅已经写到21篇了,不得不感叹当初自己坚持要重学一遍JAVA的信念,中途也算 ...

  8. JAVA——泛型类和泛型方法(静态方法泛型)

    泛型类定义的泛型,在整个类中有效.如果被方法是用,那么 泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了. 为了让不同的方法可以操作不同类型,而且类型还不确定.那么 可以将泛型定义在方 ...

  9. 0072 Java中的泛型--泛型是什么--泛型类--泛型方法--擦除--桥方法

    什么是泛型,有什么用? 先运行下面的代码: public class Test { public static void main(String[] args) { Comparable c=new ...

随机推荐

  1. docker之安装和管理mongodb

    前言 折腾一些使用docker来配置和管理mongodb和mongodb集群. 安装mongodb 从docker网站拉取mongodb镜像 docker search mongo # 选择一个版本 ...

  2. linux下brctl配置网桥

    原文:http://zhumeng8337797.blog.163.com/blog/static/1007689142011643834429/ 先装好网卡,连上网线,这是废话,不用说了. 然后开始 ...

  3. linux网桥浅析

    linux网桥浅析 原文链接:http://hi.baidu.com/_kouu/item/25787d38efec56637c034bd0 什么是桥接?简单来说,桥接就是把一台机器上的若干个网络接口 ...

  4. 大数据系列之数据仓库Hive安装

    Hive系列博文,持续更新~~~ 大数据系列之数据仓库Hive原理 大数据系列之数据仓库Hive安装 大数据系列之数据仓库Hive中分区Partition如何使用 大数据系列之数据仓库Hive命令使用 ...

  5. 破解验证码模拟登陆cnblogs

    from selenium import webdriver from selenium.webdriver import ActionChains from PIL import Image imp ...

  6. sublime sftp 打开远程文件夹

    2014-04-29 13:19:09 总结: 本文介绍两种方法,推荐第二种方法(samba+windows映射) 先贴出sublime打开远程(Linux)目录所需的配置文件(sublime是通过s ...

  7. HTML5 drawImage性能问题

    最近做游戏发现,为了节省HTTP请求,把很多组动画放到了一张图片上,也就是传说中的雪碧图,但是用drawImage从图片上截取一部分绘制在canvas上时会非常慢. 我的图片尺寸为5000*7000 ...

  8. Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String异常处理

    问题原因:Mybatis中对于时间参数进行比较时的一个BUG. 如果拿传入的时间类型参数与空字符串‘‘进行对比判断则会引发异常.,所以应该去掉该判断, 只保留非空判断就正常了 <if test= ...

  9. Ext.util.Format.date 时间格式的设置与转换

    Ext.util.Format.date 如下这段简单的代码:  var d = new Date(value.time); var s = Ext.util.Format.date(d, 'Y-m- ...

  10. Chrome插件 postman的使用方法详解!最全面的教程

    一 简介 Postman 是一款功能超级强大的用于发送 HTTP 请求的 Chrome插件 .做web页面开发和测试的人员应该是无人不晓无人不用!其主要特点 特点: 创建 + 测试:创建和发送任何的H ...