java泛型初探

来源:互联网 发布:知乎成功的原因 编辑:程序博客网 时间:2024/04/30 13:00

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
0 0
原创粉丝点击