java泛型初探

1.泛型的理解

java的一个高级用法就是泛型类,基本很多框架都会用泛型去搭建,比如Gson。。。。。泛型真是个好东西,可说是海纳百川了。。。所以作为一个android开发更有必要掌握这个东东

泛型可以设计为一个共有的功能返回不同的类型

泛型可说是一种对类型的约束,也可以说是一种对类型的容纳、扩展。。。我也说不好,纯粹是个人的理解

约束:指的泛型要是有具体的类型,那么这个就是对泛型类的一种约束,只对这具体类型起作用,无视所有类

扩展:指的泛型不是具体类类型,而是T,那么对所有类类型都起效。

2、泛型接口、泛型类、泛型方法的区分

    1)、泛型接口:其实和普通的接口没啥区别,就是多了一个泛型,可以设计为多用途的模板接口,声明如下:

             

/**
 * 类生成器
 * @author zhongwr
 *
 * @param <T>
 */
public interface Generator<T> {
	public T next();
}

      2)、泛型类:和普通的类也没啥区别,就是多了个泛型,可以设计为多用途多功能的,有点像类的组合:声明如下:

             

/**
 * 类生成器
 * 
 * @author zhongwr
 *
 * @param <T>
 */
public class BasicGeneratorImp<T> implements Generator<T> {
	private Class<T> type;

	public BasicGeneratorImp(Class<T> type) {
		this.type = type;
	}
}

    这是接收一个类.class类型的泛型类声明

    3)、泛型方法:不用说,都是套路,和普通方法的使用没区别,就是多一个泛型参数,泛型返回值;所以在传参的时候必须给予一个明确类型,否则泛型方法就没有任何意义;声明如下:

        

/**
	 * 泛型方法,用于创建一个类 :泛型方法独立于类,与泛型类 实体类都没关系 
	 * zhongwr 下午9:08:13 
	 * Generator<T>
	 */
	public static <T> Generator<T> create(Class<T> type) {
		return new BasicGeneratorImp<T>(type);
	}

       万能的泛型方法,所以要是可以,尽量使用海纳百川的泛型方法。

 接下来使用java编程思想的列子:最后附上java工程的demo

泛型接口

/**
 * 类生成器
 * @author zhongwr
 *
 * @param <T>
 */
public interface Generator<T> {
	public T next();
}

/**
 * 类生成器
 * 
 * @author zhongwr
 *
 * @param <T>
 */
public class BasicGeneratorImp<T> implements Generator<T> {
	private Class<T> type;

	public BasicGeneratorImp(Class<T> type) {
		this.type = type;
	}

	public T next() {
		try {
			return type.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException();
		}
	}

	/**
	 * 泛型方法,用于创建一个类 :泛型方法独立于类,与泛型类 实体类都没关系 
	 * zhongwr 下午9:08:13 
	 * Generator<T>
	 */
	public static <T> Generator<T> create(Class<T> type) {
		return new BasicGeneratorImp<T>(type);
	}
}

package type.coffee;

/**
 * 制作咖啡类
 * 
 * @author Administrator
 *
 */
public abstract class Coffee {
	private static int counter = 0;
	private final long id = counter++;

	public String toString() {
		return getClass().getSimpleName() + " " + id;
	}
}


import type.coffee.Americano;
import type.coffee.Coffee;

/**
 * 测试入口
 * 
 * @author zhongwr
 *
 * @param <T>
 */
public class MainTest {
	public static void main(String[] args) {
		
		// 使用泛型方法,创建泛型类
		System.out.println("className = " + BasicGeneratorImp.create(Americano.class).next());
	}
}



demo: http://download.csdn.net/detail/zhongwn/9651107
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值