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