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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章