声明一个泛型类GenericExercise< T>,内部提供一个私有的Map<String,T>,实现增、删、改、查、遍历
- User.java
import java.util.Objects;
public class User {
private int id;
private int age;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User() {
}
public User(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id == user.id &&
age == user.age &&
Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(id, age, name);
}
}
- GenericExercise.java
注意其中的update()和list(),有坑
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GenericExercise<T> {
private Map<String,T> map = new HashMap<>();
//保存T类型的变量到Map中
public void save(String id,T entity){
map.put(id, entity);
}
//获取id对应的对象
public T get(String id){
return map.get(id);
}
//替换Map中key为id的内容
public void update(String id,T entity){
// 错误的,虽然这里修改的本质是put(map的特性)
// 但是万一没找到这个id,就做添加操作了。
// map.put(id, entity);
//错误的,万一有这个id,恰巧这个value是null,应该将null修改为entity
// if(map.get(id)!=null){
// map.put(id, entity);
// }
if(map.containsKey(id)){
map.put(id, entity);
}
}
//返回Map中存放的所有T对象
public List<T> list(){
//错误的,values()方法返回的就是Collection(无序可重复),父类对象强转子类对象,转换异常
// Collection<T> values = map.values();
// return (List<T>) values;
//遍历出来重新放进去
List<T> list = new ArrayList<>();
for (T t : map.values()){
list.add(t);
}
return list;
}
//删除指定id的对象
public void delete(String id){
map.remove(id);
}
}
- GenericExerTest.java
import java.util.List;
public class GennericExerTest {
public static void main(String[] args) {
GenericExercise<User> test = new GenericExercise<>();
test.save("1000", new User(1001,22,"Tom"));
test.save("1001", new User(1001,32,"Tom1"));
test.save("1002", new User(1002,42,"Tom2"));
test.save("1003", new User(1003,52,"Tom3"));
test.update("1000", new User(1004,29,"Tom4"));
test.delete("1001");
List<User> list = test.list();
list.forEach(System.out::println);
}
}