博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day14 自己定义泛型类的使用
阅读量:5220 次
发布时间:2019-06-14

本文共 2558 字,大约阅读时间需要 8 分钟。

泛型的引入和体现:

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

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
o = new order
(); //order oo = new order();//假设不指定泛型的类型,默认是Object类型 List
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
{ int MaxSize = 30; //public T []t = new T[MaxSize]; 没有泛型数组 private T t; private List
list = new ArrayList
(); public List
getList() { return list; } //声明泛型方法
一定要在权限修饰符后面。不能缺少 public
E getE(E e) { return e; } }//子类还是不确定类型T ,实例化子类的对象时候要指明泛型的引用类型//继承泛型类或泛型接口时,能够指明泛型的类型 class SubOrder
extends order
class SubOrder
extends order
{ }

泛型的优点?

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

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

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

@Test	public void Demo2()	{		List
list = new ArrayList
(); list.add(10); list.add(new Integer(100)); list.add(Integer.valueOf(1000)); //使用迭代器遍历集合。在迭代器中明白要迭代的类型 for (Iterator
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); } }

转载于:https://www.cnblogs.com/yxwkf/p/5405965.html

你可能感兴趣的文章
黑马程序员_Java基础枚举类型
查看>>
[ python ] 练习作业 - 2
查看>>
一位90后程序员的自述:如何从年薪3w到30w!
查看>>
在.net core上使用Entity FramWork(Db first)
查看>>
System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集...
查看>>
UIImage 和 iOS 图片压缩UIImage / UIImageVIew
查看>>
MongoDB的数据库、集合的基本操作
查看>>
ajax向后台传递数组
查看>>
疯狂JAVA16课之对象与内存控制
查看>>
[转载]树、森林和二叉树的转换
查看>>
WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)
查看>>
软件测试-----Graph Coverage作业
查看>>
django ORM创建数据库方法
查看>>
创建Oracle synonym 详解
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
linux查看端口占用
查看>>
hdu - 1226 超级密码 (bfs)
查看>>
Sql常见面试题 受用了
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>