Java中泛型(1)——泛型介绍(传智播客毕老师视频讲解)

泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制

1、泛型概述
好处

1.将运行时期出现问题ClassCastException,转移到了编译时期。方便于程序员解决问题。让运行时问题减少,安全。

2,避免了强制转换麻烦。

泛型格式:通过<>来定义要操作的引用数据类型。

在使用java提供的对象时,什么时候写泛型呢?

通常在集合框架中很常见,只要见到<>就要定义泛型。其实<> 就是用来接收类型的。

使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

比如代码;

import java.util.*;

public class GenericDemo 
{
	public static void main(String[] args) 
	{
		ArrayList L=new ArrayList();
		L.add("001");
		L.add("002");
		L.add("003");
		L.add("004");
		L.add(005);
		ListIterator it=L.listIterator();
		while(it.hasNext())
		{
			String s=(String)it.next();
			System.out.println(s+"...."+s.length());
		}
	}
}
结果如下:


发现报错了,因为集合可以存储各种类型的对象,因此在使用时,可以存入005,并由于自动装箱,将其作为new Integer(005)存入L集合中,但是在迭代取的过程中,Integer类型的对象不能够自动转换至String类型的对象,所以在编译时通过,但是发生运行时异常报错。


为了能够使这种错误在编译时就明朗,解决这种安全问题,应用泛型!

代码如下:

Java中泛型(1)——泛型介绍(传智播客毕老师视频讲解)_第1张图片

可见此程序在规定泛型后,写入L.add(005)时在编译过程中就提示有错误了!而在ListIterator后定义迭代器接收类型后,在Sting s=it.next();都不用进行强制类型转换了!


2、泛型应用

在比较器中应用泛型,

Java中泛型(1)——泛型介绍(传智播客毕老师视频讲解)_第2张图片


可以看出,在创建比较器时,可以定义泛型,即指定类型进行比较:

代码如下

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class LenComparator implements Comparator
{//按照字符串长度比较,若字符串长度相同,再按照字符串的自然顺序比较
	public int compare(String  obj1,String obj2)
	{
		String s1=obj1;
		String s2=obj2;
		int i=new 	Integer(s1.length()).compareTo(new Integer(s2.length()));
		if(i>0)
			return 1;
		else if(i==0)
			return s1.compareTo(s2);
		else
			return -1;
	}
}


public class generic01 
{
	public static void main(String[] args)
	{
		TreeSet T=new TreeSet(new LenComparator());
		T.add("001");
		T.add("0002");
		T.add("00005");
		T.add("004");
		T.add("0003");
		Iterator it=T.iterator();
		while(it.hasNext())
		{
			System.out.println(".."+it.next());
		}
	}
}
结果如下:


并且由于定义了比较器泛型,在程序编译中不会有警告提示,保证了程序的安全性;同时在比较器中,避免了类型强制转换!




你可能感兴趣的:(Java基础)