1. 程式人生 > >Java中的泛型類和泛型方法區別和聯絡

Java中的泛型類和泛型方法區別和聯絡

泛型的概念大家應該都會,不懂的百度或者google,在java中泛型類的定義較為簡單
<span style="font-size:18px;"><span style="font-size:18px;">public abstract class BaseEaoImpl<T> implements BaseEao<T>{}</span></span>

這樣就定義了一個泛型類,在例項化這個類的時候,必須指明泛型T的具體型別(比例為Buttons實體),例如

<span style="font-size:18px;"><span style="font-size:18px;">public class ButtonBeanImpl extends BaseBeanImpl<Buttons> implements ButtonBean{}</span></span>
但是Java中的泛型方法就比較複雜了。

       泛型類,是在例項化類的時候指明泛型的具體型別;泛型方法,是在呼叫方法的時候指明泛型的具體型別。

<span style="font-size:18px;"><span style="font-size:18px;">	@Override
	public <T> PageModel queryPageModelByLikeAndEqual(Class<T> entityClass,
			LinkedHashMap<Object, Object> equalFields,
			LinkedHashMap<String, String> likeFields,
			LinkedHashMap<String, String> orderByFields, PageModel<T> pageModel) {
		return this.queryPageModel(entityClass, equalFields, null, likeFields, null,
				orderByFields, null, pageModel);
	}</span></span>


泛型類的呼叫
<span style="font-size:18px;"><span style="font-size:18px;">@Override
	public  PageModel<College> queryCollege(LinkedHashMap<Object, Object> equalFields,
			LinkedHashMap<String, String> likeFields,PageModel<College> pageModel) {
		// 初始化Equal查詢條件承載體
	    LinkedHashMap<String, String> orderByFields =new  LinkedHashMap<String, String>();	
	    orderByFields.put("name", "DESC");
		return commonEao.queryPageModelByLikeAndEqual(College.class, equalFields, likeFields, orderByFields, pageModel);
	}</span></span>

說明一下,定義泛型方法時,必須在返回值前邊加一個<T>,來宣告這是一個泛型方法,持有一個泛型T,然後才可以用泛型T作為方法的返回值。

Class<T>的作用就是指明泛型的具體型別,而Class<T>型別的變數c,可以用來建立泛型類的物件

當然,泛型方法不是僅僅可以有一個引數Class<T>,可以根據需要新增其他引數。

       為什麼要使用泛型方法呢?因為泛型類要在例項化的時候就指明型別,如果想換一種型別,不得不重新new一次,可能不夠靈活;而泛型方法可以在呼叫的時候指明型別,更加靈活。

       為什麼使用泛型類呢?使用泛型類可以解決重複業務的程式碼的複用問題,也就是業務顆粒的複用,同時使用泛型

型別在編譯階段就可以確定,並發現錯誤,型別的轉換都是自動和隱士的,提高了程式碼的準確率和複用率。