javaAPI-集合框架(泛型)


泛型概述

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

好处:

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

2.避免了强制转换的麻烦。

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

 

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

通常在集合框架中很常见。只要见到<>就要定义泛型。

泛型类

什么时候定义泛型类?

当类中要操作的引用数据类型不确定的时候。早期定义Object来完成扩展。现在定义泛型来完成扩展。

示例:

class Utils<T>
{
	private T t;
	public void setObject(T t)
	{
		this.t = t;
	}
	public T getObject()
	{
		return t;
	}
}

泛型方法

泛型类定义的泛型在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。所以,为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上。

静态泛型方法

特殊之处,静态方法不可以访问类上定义的泛型。

如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。

例:public static <T> void method(T t){}

 

泛型定义在接口上示例:

interface Inter<T>
{
	void show(T t);
}
class InterImpl<T> implements Inter<T>
{
	public void show(T t)
	{
		System.out.println("show :"+t);
	}
}
class GenericDemo
{
	public static void main(String[] args) 
	{
		InterImpl<Integer> i = new InterImpl<Integer>();
		i.show(4);
	}
}

类型不确定时怎么办?

当我们对象的类型不确定的时候,用<?>如:public static void demo(ArrayList<?> al){}

<?>与<T>的区别

T:代表具体类型,传进来什么就是什么类型。

?:代表不确定类型,它是一个通配符,也可以理解为占位符。

<?>好处:提高了扩展性。弊端:不能使用类型的特有方法。如:length();

泛型限定

泛型限定有两个限制 1.上限  我可以向上限定             2.下限  我可以向下限定

格式:

<? extends E>:可以接收E类型或者E的子类型。上限

<? super E>:可以接收E类型或者E的父类型。下限

<? super E>示例:

import java.util.*;
class GenericDemo 
{
	public static void main(String[] args) 
	{
		
		TreeSet<Student> ts = new TreeSet<Student>(new Comp());

		ts.add(new Student("abc03"));
		ts.add(new Student("abc02"));
		ts.add(new Student("abc06"));
		ts.add(new Student("abc01"));
		
		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("wabc--03"));
		ts1.add(new Worker("wabc--02"));
		ts1.add(new Worker("wabc--06"));
		ts1.add(new Worker("wabc--01"));

		Iterator<Worker> it1 = ts1.iterator();
		while(it1.hasNext())
		{
			System.out.println(it1.next().getName());
		}
	}
}
class Comp implements Comparator<Person>
{
	public int compare(Person p1,Person p2)
	{
		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);
	}
}

总结:

          泛型的好处是避免了强转,把错误移到了编译时期,提高了安全性。

            泛型除了可以定义在类上,还可以定义在方法上。

            泛型限定是用于泛型扩展用的。如果不明确类型可以用<?>来占位。


 

 


 

 

 


 


 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值