Java中的泛型類和泛型方法區別和聯絡
阿新 • • 發佈:2019-02-01
泛型的概念大家應該都會,不懂的百度或者google,在java中泛型類的定義較為簡單
泛型類的呼叫
說明一下,定義泛型方法時,必須在返回值前邊加一個<T>,來宣告這是一個泛型方法,持有一個泛型T,然後才可以用泛型T作為方法的返回值。
<span style="font-size:18px;"><span style="font-size:18px;">public abstract class BaseEaoImpl<T> implements BaseEao<T>{}</span></span>
這樣就定義了一個泛型類,在例項化這個類的時候,必須指明泛型T的具體型別(比例為Buttons實體),例如
但是Java中的泛型方法就比較複雜了。<span style="font-size:18px;"><span style="font-size:18px;">public class ButtonBeanImpl extends BaseBeanImpl<Buttons> implements ButtonBean{}</span></span>
泛型類,是在例項化類的時候指明泛型的具體型別;泛型方法,是在呼叫方法的時候指明泛型的具體型別。
<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一次,可能不夠靈活;而泛型方法可以在呼叫的時候指明型別,更加靈活。
為什麼使用泛型類呢?使用泛型類可以解決重複業務的程式碼的複用問題,也就是業務顆粒的複用,同時使用泛型
型別在編譯階段就可以確定,並發現錯誤,型別的轉換都是自動和隱士的,提高了程式碼的準確率和複用率。