Day14 自己定义泛型类的使用
泛型的引入和体现:
问题:集合中能够存储各种类型的元素,可是由于集合能够存储各种类型数据。在获取集合中元素时,就会造成数据不安全。
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 自己定义泛型类的使用的更多相关文章
- Java开发笔记(六十九)泛型类的定义及其运用
前面从泛型方法的用法介绍到了泛型的起源,既然单个方法允许拥有泛化的参数类型,那么一个类也应当支持类级别的泛化类型,例如各种容器类型ArrayList.HashMap等等.一旦某个类的定义代码在类名称后 ...
- Java分享笔记:泛型类的定义与使用
当类中要操作的引用数据类型不确定时,可以定义泛型类完成扩展.下面是程序演示. package packB; class Student { //定义学生类 public String st = &qu ...
- java 泛型 -- 泛型类,泛型接口,泛型方法
泛型T泛型的许多最佳例子都来自集合框架,因为泛型让您在保存在集合中的元素上指定类型约束.在定义泛型类或声明泛型类的变量时,使用尖括号来指定形式类型参数.形式类型参数与实际类型参数之间的关系类似于形式方 ...
- Android(java)学习笔记90:泛型类的概述和使用
用法一: 下面我们首先定义泛型类: package cn.itcast_04; /* * 泛型类:把泛型定义在类上 */ public class ObjectTool<T> { //这里 ...
- 泛型类、Map集合
————泛型: JDK1.5之后出现的新特性:用于解决安全问题,是一个类型安全机制. 好处: 1.将运行时期出现的问题ClassCastException ,转移到了编译时期,方便于程序员解决问题,让 ...
- Java基础----Java---集合框架---泛型、泛型方法、静态方法泛型、泛型接口、泛型限定、泛型类
泛型:jdk1.5后的新特性,用于解决安全问题,是一个安全机制. 好处: 1.将运行时的异常出现问题classcastException.转移到了编译时期.方便程序员调试解决问题,让运行事情问题减少, ...
- JAVA之旅(二十一)——泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符
JAVA之旅(二十一)--泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符 不知不觉JAVA之旅已经写到21篇了,不得不感叹当初自己坚持要重学一遍JAVA的信念,中途也算 ...
- JAVA——泛型类和泛型方法(静态方法泛型)
泛型类定义的泛型,在整个类中有效.如果被方法是用,那么 泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了. 为了让不同的方法可以操作不同类型,而且类型还不确定.那么 可以将泛型定义在方 ...
- 0072 Java中的泛型--泛型是什么--泛型类--泛型方法--擦除--桥方法
什么是泛型,有什么用? 先运行下面的代码: public class Test { public static void main(String[] args) { Comparable c=new ...
随机推荐
- c++ 函数指针简单实例
一开始看函数指针的时候我是很懵的,因为不知道它有什么用,之后慢慢就发现了自己的愚昧无知. 假设我们想实现一个数据结构,比如二叉搜索树,堆.又或者是一个快排,归并排序. 我们一般是直接在两个数要比较的时 ...
- RTS与CTS的含义【转】
转自:http://www.cnblogs.com/sunyubo/archive/2010/04/21/2282176.html 一.RS232标准中的RTS与CTS RTS,CTS------请求 ...
- linux中serial driver理解【转】
转自:http://blog.csdn.net/laoliu_lcl/article/details/39967225 英文文档地址:myandroid/kernel_imx/Documentatio ...
- 首发:极简的Centos主机监控方法,分分钟即可使用【转】
需求天天有,今年事更多.硬盘测试刚刚完成,就又来了性能监控的需求.一般我们生产就用zabbix了,用起来还行,就是蛮多脚本要写.开发和测试都是分散的,经常还要重装系统,用zabbix就算了,开发和测试 ...
- linux使用badblocks命令扫描硬盘排除故障(待验证)
检查硬盘是否产生坏道并输出# badblocks -s -v -o /root/badblocks.log /dev/sda //公司操作 -s Show the p ...
- [原创]Python/Django使用富文本编辑器XHeditor上传本地图片
前言 为了在Django框架下使用Xheditor上传图片,居然折腾了我一个晚上.期间也遇到种种问题,网上相关资料极少.现在把经验分享给大家. 正文 xheditor篇 1.下载http://xhed ...
- [转] caffe视觉层Vision Layers 及参数
视觉层包括Convolution, Pooling, Local Response Normalization (LRN), im2col等层. 1.Convolution层: 就是卷积层,是卷积神经 ...
- nio--自己总结
阻塞/非阻塞 + 同步/异步 其实,这两者存在本质的区别,面向的对象是不同的. 阻塞/非阻塞:进程/线程需要操作的数据如果尚未就绪,是否妨碍了当前进程/线程的后续操作. 同步/异步:数据如果尚未就 ...
- 阿里云服务器配置nginx和PHP
1. 安装及启动nginx 输入yum install nginx命令进行nginx的安装,当需要确认时输入”y“确认. yum install nginx 安装完成后,输入service nginx ...
- AxureRP8实战手册
基础操作篇 本篇包含56种常见的基础操作,初学者应在掌握本篇内容后再进行实战案例篇的学习,以免产生学习障碍.同时,建议具备一定基础的读者学习本篇中相对生疏的内容,并加以掌握. 第1章 使用元件 本文目 ...