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 ...
随机推荐
- 关于gb2312编码和utf8码的一个问题
ANSI(注意拼写不是ASCII)并不是“一种”编码,而是“多种”编码的统称.在简体中文Windows上,ANSI指GBK编码:在繁体中文Windows上,ANSI指Big5编码:在英文Windows ...
- C++笔试易错题集(持续更新)
1.如下代码输出结果是什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include<stdio.h> char *myString() { ...
- QTP设置共享对象库
第一步:把需要加到共享对象库中的各个用例脚本的对象库,分别导出成.tsr文件. 操作方法:先用QTP打开已经录制完毕的脚本后,选择Resources-->Object Repository.然后 ...
- Oracle ORA-12541:TNS:无监听程序
Oracle ORA-12541:TNS:无监听程序 标签: Oracle DataBase 今天使用Oracle数据库,使用可视化连接工具连接测试环境的数据库时提示无监听程序,最后在老师帮助下终于搞 ...
- 掩膜 rcnn
更多讨论,参考知乎:https://www.zhihu.com/question/57403701
- OCR识别-python3.5版
刚接触,啥子都不会,按着教程走 需求:识别图片中的文字信息环境:windows系统 开发语言:python3.5 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.p ...
- Sublime Text 使用介绍/全套快捷键及插件推荐
如果说Notepad++是一款不错Code神器,那么Sublime Text应当称得上是神器滴哥.Sublime Text最大的优点就是跨平台,Mac和Windows均可完美使用:其次是强大的插件支持 ...
- LOJ 10138 -「一本通 4.5 例 1」树的统计
树链剖分模板题,详见这篇博客.
- Android 隐藏、显示软键盘方法
隐藏软键盘的终极方法: public class SoftKeyboardUtil { /** * 隐藏软键盘(只适用于Activity,不适用于Fragment) */ public static ...
- activeMQ安全配置及常见问题解决
https://blog.csdn.net/dandan2zhuzhu/article/details/78461872