Generic泛型

 泛型:JDK1.5版本出现的新特性,用于解决安全问题,是一个安全机制
 好处:
  1.将运行时期出现的问题ClassCastException,转移到编译时期,便于程序员解决问题
  2.避免了强制转换的繁琐


 在使用Java提供的对象时,什么时候写泛型?
 通常在集合框架中很常见,只要见到<>就要定义泛型
 其实<引用数据类型>就是用来接收类型的


 * 特殊之处:
 * 静态方法不可以访问类上定义的泛型(静态方法在类定义之时已经存在)
 * 如果静态方法操作的引用数据类型不确定,可以将泛型定义在静态方法上




 * 类上定义的泛型,整个类都有效
 * 方法上定义的泛型,只在方法内有效
 * 为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上
//类上定义的泛型作用域为整个类
class Demo<T>  
{
	public void show(T t)
	{
		System.out.println("show:"+t);
	}
          //函数上定义的泛型作用域为整个函数内部
	public <Q>void print(Q q)
	{
		System.out.println("print:"+t);
	}
}
----------------------------------------------------------------
//定义在接口上的泛型
interface Inter<T>
{
	void show(T t);
}
//实现接口时因不明确类型,继续使用泛型
class InterImpl<T> implements Inter<T>
{
	public void show(T t)
	{
		System.out.println("show:"+t);
	}
}


 * ? 通配符(占位符)
 * 泛型的限定:
 * 1.  ? extends E:可以接收E类型或者E的子类型。上限
 * 2.  ? super E:可以接受E类型或者E的父类型。下限


//此处可传入Person及其子类对象
public static void print(ArrayList<? extends Person> al)
	{
                //可接收Person及其子类对象
		for(Iterator<? extends Person> it =al.iterator(); it.hasNext();)
		{
			System.out.println(it.next().getName());
		}
	}


----------------------------------------------------------------
//传入一个比较器comp(),提供TreeSet排序的依据
TreeSet<Stu> ts = new TreeSet<Stu>(new comp());
		ts.add(new Stu("student04"));
		ts.add(new Stu("student01"));
		ts.add(new Stu("student03"));
		print(ts);


//可传入Pepole及其子类对象
class comp implements Comparator<Pepole>
{
        //复写compare比较方法
	@Override
	public int compare(Pepole o1, Pepole o2) {


		//compareTo();是String类中的方法
		return o1.getName() . compareTo(  o2.getName()  ) ;
	}
	
}

泛型示例

public static void main(String[] args) 
		
		TreeSet<String> ts = new TreeSet<String>(new LenComparator());
		ts.add("abcd");
		ts.add("cc");
		ts.add("cba");
		ts.add("aaa");
		ts.add("z");
		ts.add("hahaha");
		
		Iterator<String> it = ts.iterator();
		
		while(it.hasNext())
		{
			String s = it.next();
			System.out.println(s);
		}






class LenComparator implements Comparator<String>


	@Override
	public int compare(String o1, String o2) {


		int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
		if(num==0)
			return o1.compareTo(o2);
		return num;
	}
------------------------------------------------------------------------------------------
class Tool<E>
{
	private E e;
	public void setObject(E e){
		this.e=e;
	}
	public E getObject(){
		return e;
	}
}


public class GenericDemo3 {
	public static void main(String[] args) {
		Tool<Worker> t = new Tool<Worker>();
		t.setObject(new Worker());
		Worker w = t.getObject();	
	}
}
---------------------------------------------------------------------------------------
public class GenericDemo6 {


	public static void main(String[] args) {
	
		ArrayList<Person> al1 = new ArrayList<Person>();
		al1.add(new Person("person01"));
		al1.add(new Person("person02"));
		al1.add(new Person("person03"));	
		print(al1);


		ArrayList<Student> al2 = new ArrayList<Student>();
		al2.add(new Student("Student01"));
		al2.add(new Student("Student02"));
		al2.add(new Student("Student03"));
		print(al2);		
		
	}


	
	public static void print(ArrayList<? extends Person> al)
	{
		for(Iterator<? extends Person> it =al.iterator(); it.hasNext();)
		{
			System.out.println(it.next().getName());
		}
	}
}
----------------------------------------------------------------------------------------------
public class GenericDemo7 {


	public static void main(String[] args) {
		
		TreeSet<Stu> ts = new TreeSet<Stu>(new comp());
		ts.add(new Stu("student04"));
		ts.add(new Stu("student01"));
		ts.add(new Stu("student03"));
		print(ts);
		
		TreeSet<Workers> ts1 = new TreeSet<Workers>(new comp());
		ts1.add(new Workers("Worker03"));
		ts1.add(new Workers("Worker01"));
		ts1.add(new Workers("Worker05"));
		print(ts1);
	
	}
	public static void print(TreeSet ts)
	{
		for(Iterator<Pepole> it = ts.iterator();it.hasNext();)
		{
			System.out.println(it.next().getName());
		}
	}
}


class comp implements Comparator<Pepole>
{


	@Override
	public int compare(Pepole o1, Pepole o2) {
		
		return o1.getName().compareTo(o2.getName());
	}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值