需求:

定义个泛型类 DAO,在其中定义一个Map 成员变量,Map 的键为 String 类型,值为 T 类型。
分别创建以下方法:
(1) public void save(String id,T entity): 保存 T 类型的对象到 Map 成员变量中
(2) public T get(String id):从 map 中获取 id 对应的对象
(3) public void update(String id,T entity):替换 map 中key为id的内容,改为 entity 对象
(4) public List list():返回 map 中存放的所有 T 对象
(5) public void delete(String id):删除指定 id 对象
定义一个 User 类:
该类包含:private成员变量(int类型) id,age;(String 类型)name。
创建 DAO 类的对象, 分别调用其 save、get、update、list、delete 方法来操作 User 对象,
使用 Junit 单元测试类进行测试。

实现:

image.png

User

  1. package test;
  2. public class User {
  3. private int id;
  4. private int age;
  5. private String name;
  6. public User(int id, int age, String name) {
  7. this.id = id;
  8. this.age = age;
  9. this.name = name;
  10. }
  11. public int getId() {
  12. return id;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. public int getAge() {
  18. return age;
  19. }
  20. public void setAge(int age) {
  21. this.age = age;
  22. }
  23. public String getName() {
  24. return name;
  25. }
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. @Override
  30. public String toString() {
  31. return "User{" +
  32. "id=" + id +
  33. ", age=" + age +
  34. ", name='" + name + '\'' +
  35. '}';
  36. }
  37. }

DAO

  1. package test;
  2. import java.util.*;
  3. public class DAO<T> {//泛型类
  4. private Map<String, T> map = new HashMap<>();
  5. public T get(String id) {
  6. return map.get(id);
  7. }
  8. public void update(String id,T entity) {
  9. map.put(id, entity);
  10. }
  11. //返回 map 中存放的所有 T 对象
  12. //遍历map [k-v],将map的 所有value(T entity),封装到ArrayList返回即可
  13. public List<T> list() {
  14. //创建 Arraylist
  15. List<T> list = new ArrayList<>();
  16. //遍历map
  17. Set<String> keySet = map.keySet();
  18. for (String key : keySet) {
  19. //map.get(key) 返回就是 User对象->ArrayList
  20. list.add(map.get(key));//也可以直接使用本类的 get(String id)
  21. }
  22. return list;
  23. }
  24. public void delete(String id) {
  25. map.remove(id);
  26. }
  27. public void save(String id,T entity) {//把entity保存到map
  28. map.put(id, entity);
  29. }
  30. }

Main

  1. package test;
  2. import org.junit.Test;
  3. import java.util.List;
  4. public class Main {
  5. public static void main(String[] args) {
  6. }
  7. @Test
  8. public void testList() {
  9. //说明
  10. //这里我们给T 指定类型是User
  11. DAO<User> dao = new DAO<>();
  12. dao.save("001", new User(1,10,"jack"));
  13. dao.save("002", new User(2,18,"king"));
  14. dao.save("003", new User(3,38,"smith"));
  15. List<User> list = dao.list();
  16. System.out.println("list=" + list);
  17. dao.update("003", new User(3, 58, "milan"));
  18. dao.delete("001");//删除
  19. System.out.println("===修改后====");
  20. list = dao.list();
  21. System.out.println("list=" + list);
  22. System.out.println("id=003 " + dao.get("003"));//milan
  23. }
  24. }
  25. /**
  26. * 定义个泛型类 DAO<T>,在其中定义一个Map 成员变量,Map 的键为 String 类型,值为 T 类型。
  27. *
  28. * 分别创建以下方法:
  29. * (1) public void save(String id,T entity): 保存 T 类型的对象到 Map 成员变量中
  30. * (2) public T get(String id):从 map 中获取 id 对应的对象
  31. * (3) public void update(String id,T entity):替换 map 中key为id的内容,改为 entity 对象
  32. * (4) public List<T> list():返回 map 中存放的所有 T 对象
  33. * (5) public void delete(String id):删除指定 id 对象
  34. *
  35. * 定义一个 User 类:
  36. * 该类包含:private成员变量(int类型) id,age;(String 类型)name。
  37. *
  38. * 创建 DAO 类的对象, 分别调用其 save、get、update、list、delete 方法来操作 User 对象,
  39. * 使用 Junit 单元测试类进行测试。
  40. *
  41. * 思路分析
  42. * 1. 定义User类
  43. * 2. 定义Dao<T>泛型类
  44. */

image.png