自jdk1.6之後泛型就被廣泛使用了,剛開始也是這麼稀裡糊塗的學了但是老是搞不懂其中的奧妙,後來隨著項目經驗的增多慢慢的才體會到了泛型的各種好處,看了不少項目封裝的底層才發現原來泛型一般和接口混合使用來滿足標准制定和參數多樣化這樣的代碼需求。弄清楚之後我自己也動手實際體驗了一下,覺得還是挺簡單的。接下來就分享下我學泛型的心得,寫的不好大家可以指出來。
1 標識接口
雖然叫標識接口但是這個java類不僅僅局限於interface,class也是OK的,選擇接口還是類關鍵看自己的選擇;下面是我定義的一個標識接口
package org.lxh;
public interface BaseInfo {
}
一般來說這個接口可能定義了一些方法,不定義也是可以的
2 把接口和泛型混合使用制定一個比較通用的接口
package org.lxh;
public interface IGenericManager<E extends BaseInfo>{
public void save(E info);
public void del(E info);
public void update(E info);
public void findAll(E info);
public void findById(int id);
}
泛型的奇特之處就在這裡,IGenericManager的尖括號裡是什麼那裡面對於方法的參數就是什麼,前提是這個對象滿足BaseInfo這個標准(可以理解為BaseInfo的子類或是子接口)
3 通用接口如何與其他java代碼進行結合
package org.lxh;
public interface UserManager extends IGenericManager<UserInfo>{
}
運用對象的繼承特性可以使接口或類的功能近一步加強,代碼的復用性也更好
4 普通接口的實現類
package org.lxh;
public class UserManagerImpl implements UserManager{
public void save(UserInfo info) {
// TODO Auto-generated method stub
}
public void del(UserInfo info) {
// TODO Auto-generated method stub
}
public void update(UserInfo info) {
// TODO Auto-generated method stub
}
public void findAll(UserInfo info) {
// TODO Auto-generated method stub
}
public void findById(int id) {
// TODO Auto-generated method stub
}
}
這樣我們就不在每個普通的接口裡面定義一大堆重復的方法,節約了時間成本
5 關於pojo類
既然泛型是為參數的多樣化服務,那麼pojo類自然應實現標識接口或標識類
package org.lxh;
public class UserInfo implements BaseInfo{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
編寫高質量代碼 改善Java程序的151個建議 PDF高清完整版 http://www.linuxidc.com/Linux/2014-06/103388.htm
Java 8簡明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm
Java對象初始化順序的簡單驗證 http://www.linuxidc.com/Linux/2014-02/96220.htm
Java對象值傳遞和對象傳遞的總結 http://www.linuxidc.com/Linux/2012-12/76692.htm
Java對象序列化ObjectOutputStream和ObjectInputStream示例 http://www.linuxidc.com/Linux/2012-08/68360.htm