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