痛點: 使用Mybatis框架的時候,想封裝一個底層JDBC控制器,用於提供和Mybatis交互的增刪改查接口(公用的接口),但由於公用的查詢方法可能是用戶自定義的任意一個和表對應的java bean類型,所以要考慮怎么樣給調用者返回正確的返回值類型,不需要調用者自己強轉型的動作(例如:返回Object類型給調用者,那么調用者就需要拿到這個Object類型進行強轉型為表對應的java bean類型)。
解決方案:
可以說java提供的泛型 T 是非常實用強大的一個特性,雖然說它是假的泛型(相對於C里面的泛型),我們可以考慮將方法的返回值設為泛型,因為泛型是在運行時才確定真正的類型,而並非在編譯時。
例子:
1. 服務提供者 函數:
//通過<T>聲明告訴JVM返回值定義一個泛型 T
//// 這里的T只是個占位符的效果,26個字母隨便寫哪個字母都可以,但一定要是和< >里面相同的字母,這里使用T
public <T> T findList(String sqlID,Map<String,Object> params) {
String statement = "com.mybatis.mapping.userMapper."+sqlID;//映射sql的標識字符串
return (T) this.session.selectList(statement, params);
}
2. 服務調用者 函數:
//這里接收的類型聲明直接寫真實的類型就可以,無需強制轉換
List<SubsHis> list = jdbc.findList("getSubsHisList", map);