黑马程序员---泛型

----- http://www.itheima.comjava培训、android培训期待与您交流!-----


1、概述

     泛型是JDK1.5版本添加的新特性,是一种安全机制,用于解决安全问题。
     泛型主要使用在 集合框架中,为了保证存取数据的类型一致,就要指定要存取的数据类型,这里所说的数据类型是引用数据类型。

2、泛型的使用方式:
    (1)泛型可以定义在方法上,那么就可以操作不同类型的数据。
例如:public <T> void show(T t){}
在方法上定义泛型,定义的是什么类型<T>,传入的数据就应该是什么类型的(T t)。
泛型也可以在静态方法中定义:且泛型的位置在 返回值类型前,修饰符后
    (2)泛型可以定义在接口上。
例如:interface Inter <T>{ void show(T t) }
这里的参数时形参(形式参数),在某类在实现接口的时候指定的泛型就是实参(实际参数),
如<String>,这里指定的数据类型就是字符串类型,那么接收的数据类型也要是字符串类型

3、泛型限定
     当泛型不明确时,用占位符(通配符)<?>
     当泛型明确时,就指定具体类型 <T>

4、使用泛型的好处
    (1)将运行时期的类型转换异常(ClassCastException)转移到编译时期, 便于程序员检查
    (2)避免了强制类型转换的麻烦
下面举个简单的例子:
例如,向TreeSet集合中存储自定义对象(Student/Worker)。TreeSet集合可对集合中的元素进行排序
分析:在对学生和工人排序时,要定义两个比较器,强制使学生和工人具有比较性,而此时就使得代码的复用性减弱。
          那么,就把学生和工人的共同属性向上抽取,形成Person类,在定义比较器时添加泛型,就使得存取的类型一致。


import java.util.*;
class GenericDemo3 
{
	public static void main(String[] args) 
	{
		//接收的类型
		TreeSet<Student> ts = new TreeSet<Student>(new Comp());
		ts.add(new Student("wangshan---001"));
		ts.add(new Student("wangshan---02"));
		ts.add(new Student("wangshan---007"));
		ts.add(new Student("wangshan---03"));
		//获取的类型要与接收的类型一致
		Iterator<Student> it = ts.iterator();
		while (it.hasNext())
		{
			System.out.println(it.next().getName());
		}

		TreeSet<Worker> ts1 = new TreeSet<Worker>(new Comp());
		ts1.add(new Worker("lisi01"));
		ts1.add(new Worker("lisi09"));
		ts1.add(new Worker("lisi06"));
		ts1.add(new Worker("lisi009"));

		Iterator<Worker> it1 = ts1.iterator();
		while (it1.hasNext())
		{
			System.out.println(it1.next().getName());
		}		
	}
}
//定义比较器
class Comp implements Comparator<Person>
{
	//覆盖compare方法
	public int compare(Person p1,Person p2)
	{
		//return p1.getName().compareTo(p2.getName());
		return p2.getName().compareTo(p1.getName());
	}
}
class Person
{
	private String name;

	Person(String name)
	{
		this.name = name;
	}

	public String getName()
	{
		return name;
	}
	public String toString()
	{
		return "person:" + name;
	}
}

class Student extends Person
{
	Student(String name)
	{
		super(name);
	}
}
class Worker extends Person
{
	Worker(String name)
	{
		super(name);
	}
}


----- http://www.itheima.comjava培训、android培训期待与您交流!-----




猜你喜欢

转载自wtt2312.iteye.com/blog/1847123