3.4 KiB
代码审查报告(Cache<K,V> 泛型缓存类)
一、代码整体评价
这段代码整体质量很高,实现了一个基于泛型的键值缓存,功能完整、结构清晰、符合 Java 编码规范,完全满足作业要求。
二、代码优点
正确使用泛型 <K,V>泛型定义规范,支持任意类型的键值对,通用性强。
封装性良好使用 private final Map<K,V> 存储数据,外部无法直接修改,保证数据安全。
功能完整实现了缓存的核心操作:
添加 put
获取 get
删除 remove
判断存在 containsKey
清空 clear
获取大小 size
代码简洁易读方法命名规范、注释清晰、逻辑直白,符合 Java 标准写法。
自带测试方法main 方法提供完整测试用例,可直接运行验证功能。
依赖合理基于 HashMap 实现,性能高效,适合缓存场景。
三、代码存在的问题
这些不是错误,只是不够规范:
没有对 null 做安全处理
允许存入 null 键 / 值
获取时可能返回 null,外部使用容易空指针
→ 建议增加非空校验
线程不安全HashMap 是非线程安全的,多线程环境下会出现数据错误。
没有最大容量限制无缓存上限,不断存入会导致内存占用过高。
无过期策略真实缓存都有过期时间,当前代码数据永久保存。
缺少 toString () 方法无法直接打印查看缓存内容,调试不方便。
四、改进后的优化代码
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public class Cache<K, V> {
private final Map<K, V> cacheMap;
public Cache() {
this.cacheMap = new HashMap<>();
}
// 存入缓存(增加非空判断)
public void put(K key, V value) {
Objects.requireNonNull(key, "键不能为空");
Objects.requireNonNull(value, "值不能为空");
cacheMap.put(key, value);
}
// 获取缓存
public V get(K key) {
return cacheMap.get(key);
}
// 删除
public void remove(K key) {
cacheMap.remove(key);
}
// 是否包含
public boolean containsKey(K key) {
return cacheMap.containsKey(key);
}
// 清空
public void clear() {
cacheMap.clear();
}
// 大小
public int size() {
return cacheMap.size();
}
// 打印缓存内容
public String toString() {
return "Cache{" + "data=" + cacheMap + '}';
}
// 测试
public static void main(String[] args) {
Cache<String, Integer> studentScoreCache = new Cache<>();
studentScoreCache.put("张三", 90);
studentScoreCache.put("李四", 85);
studentScoreCache.put("王五", 95);
System.out.println(studentScoreCache);
System.out.println("张三的分数:" + studentScoreCache.get("张三"));
System.out.println("缓存大小:" + studentScoreCache.size());
studentScoreCache.remove("李四");
System.out.println("删除李四后:" + studentScoreCache);
studentScoreCache.clear();
System.out.println("清空后缓存大小:" + studentScoreCache.size());
}
}