java集合框架扩展之泛型

集合框架扩展之泛型

泛型

泛型(Generic),是JDK1.5之后新增java语法糖(糖衣语法:对程序本身没有任何影响,但是为开发者提供了更加便利的操作),泛型表示为参数化类型,即将一个数据类型作为参数传递到类,接口,方法中,将原本在运行期间才能出现的问题,提前到编译期间,从而优化代码的可能性(最大限度的避免一些运行时异常的出现);java中的泛型分为三种泛型表示:

  1. 泛型类
  2. 泛型接口
  3. 泛型方法

泛型类

直接在类后面通过<>包裹不确定的数据类型,在类中可以对这些不确定的类型使用,创建对象时声明具体的类型,这样一来,调用类中成分时,数据类型都已确定

/**泛型类*/
public class DateManager<S,D,I> {

	private S s;
	private D d;
	private I i;
	
	public void add(S s){
		
		System.out.println(s);
	}	
	
	public static void main(String[] args) {
		DateManager<String,Date,Integer> m = new DateManager<>();
		m.s = "hello";
		m.i = 10;
		m.d = new Date();
		
		m.add(m.s);
	}
}

泛型接口

泛型接口即在接口定义时使用泛型声明,比如完成一个员工管理系统时,系统中会涉及到一些必要的实体类:员工类,部门类;而针对这些类也会具备一些基本的管理操作(增删查改),由于软件项目的特殊性,要求扩展,以及高内聚低耦合等原则,因此,使用泛型接口可以统一管理,比如:

BaseManager.java

public interface BaseManager<T> {
	/**添加*/
	public boolean add(T e);
    /**删除*/
	public boolean delete(T e);
    /**修改*/
	public boolean update(T e);
    /**根据id查询*/
	public T findById(T e);
    /**查询所有*/
	public List<T> findAll(T e);
	
}

通过阅读以上接口不难看出,该接口主要完成一些增删改查操作,由于被操作的数据类型不确定性,因此我们可以通过指定泛型,让接口的实现类或者子接口确定数据类型,比如:

EmpManager.java

public class EmpManager implements BaseManager<Emp>{
	@Override
	public boolean add(Emp e) {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public boolean delete(Emp e) {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public boolean update(Emp e) {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public Emp findById(Emp e) {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public List<Emp> findAll(Emp e) {
		// TODO Auto-generated method stub
		return null;
	}
}

DeptManager.java

public class DeptManagerImpl implements BaseManager<Dept>{
	@Override
	public boolean add(Dept e) {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public boolean delete(Dept e) {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public boolean update(Dept e) {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public Dept findById(Dept e) {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public List<Dept> findAll(Dept e) {
		// TODO Auto-generated method stub
		return null;
	}
}

通过上述代码可以看出,在实现类实现接口时可以确定操作的数类型

Test.java

public class Test {
	public static void main(String[] args) {			
		BaseManager<Emp> bm = new EmpManager();	
		BaseManager<Dept> bm2 = new DeptManager();
	}
}

测试类中虽然可以创建不同的管理实现类,但是都可以使用同一个接口声明(多态),此时数据类型的检查即在编译期间解决。

泛型方法

public class DBManager {

	//泛型方法
	public <T> T queryOne(Class<T> t){
		
		return null;
	}
	//泛型方法
	public <T> List<T> queryList(Class<T> t){
		
		return null;
	}
    //泛型方法
    public <E> void doSomeThing(E e){
		
	}
	
	public static void main(String[] args) {
		DBManager db = new DBManager();
		Emp emp = db.queryOne(Emp.class);
		Dept dept = db.queryOne(Dept.class);
		
		List<Emp> list_emp = db.queryList(Emp.class);
		List<Dept> list_dept = db.queryList(Dept.class);
	}
}

一句话总结泛型:

将可能在运行期间出现的异常提前到编译期间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值