实例1:
// 表的共性操作的DAO
public class DAO<T> {
// 添加一条记录
public void add(T t) {
}
// 删除一条记录
public boolean remove(int index) {
return false;
}
// 修改一条记录
public void update(int index,T t) {
}
// 查询一条记录
public T getIndex(int index){
return null;
}
// 查询多条记录
public List<T> getForList(int index) {
return null;
}
// 泛型方法
// 举例:获取表中一共有多少条记录?获取最大的员工入职时间?
public <E> E getValue() {
return null;
}
}
=====================================================================
// 此类对应数据库中的customer表
public class Customer {
}
// 只能操作某一个表的DAO
public class CustomerDAO extends DAO<Customer> {
}
======================================================================
// 此类对应数据库中的student表
public class Student {
}
// 只能操作某一个表的DAO
public class StudentDAO extends DAO<Student> {
}
========================================================================
public class DAOTest {
@Test
public void test1(){
CustomerDAO dao1 = new CustomerDAO();
dao1.add(new Customer());
List<Customer> list = dao1.getForList(10);
StudentDAO dao2 = new StudentDAO();
Student student = dao2.getIndex(1);
}
}
实例2:泛型嵌套
![image-20200828230633364](https://gitee.com/kehuaihan/picture/raw/master/picture/image-20200828230633364.png)
实例3:
public class DAO<T> {
private Map<String,T> map = new HashMap<String,T>();
// 保存 T 类型的对象到 Map 成员变量中
public void save(String id, T entity) {
map.put(id,entity);
}
// 从 map 中获取 id 对应的对象
public T get(String id) {
return map.get(id);
}
// 替换 map 中 key 为id的内容,改为 entity 对象
public void update(String id,T entity) {
if(map.containsKey(id)) {
map.put(id,entity);
}
}
// 返回 map 中存放的所有 T 对象
public List<T> list(){
// 错误的:
// 原因1:如果 map.values() 的集合就是 List 的,向上转型成 Collection,再向下转型成 List,那没问题;但你不确定 map.values() 的集合就是 List;
// 原因2:map里面的元素是无序的,你直接生猛的转成 List 有序的,这样不合适;
// Collection<T> values = map.values();
// return (List<T>) values;
// 正确的:
// 遍历一下,装到新的List中
ArrayList<T> list = new ArrayList<>();
Collection<T> values = map.values();
for(T t : values) {
list.add(t);
}
return list;
}
// 删除指定 id 对象
public void delete(String id) {
map.remove(id);
}
}
====================================================================================
public class User {
private int id;
private int age;
private String name;
// 省略了 getter/setter 方法
public User(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
// 泛型T(具体类型User)会存放到Map集合中,所以通常还会重写equals方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
if (id != user.id) return false;
if (age != user.age) return false;
return name != null ? name.equals(user.name) : user.name == null;
}
@Override
public int hashCode() {
int result = id;
result = 31 * result + age;
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}
}
=============================================================================
public class DAOTest {
public static void main(String[] args) {
DAO<User> dao = new DAO<User>();
dao.save("1001",new User(1001,34,"周杰伦"));
dao.save("1002",new User(1002,20,"昆凌"));
dao.save("1003",new User(1003,25,"蔡依林"));
List<User> list = dao.list();
list.forEach(System.out::println);
dao.update("1003",new User(1003,30,"方文山"));
dao.delete("1002");
}
}