You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Group类开发:如何拦截违规操作、过滤同ID用户仅留首个

Group类开发问题的落地实现

1. 同ID重复数据去重,保留首次出现的条目

  • 实现核心:在添加操作的最前置环节做同ID校验,只要遍历命中已存在的同ID Kid,就直接拦截后续重复条目,保证第一次插入的同ID记录永远保留,绝不被后续重复数据覆盖。
  • 前置要求:Kid类需要基于业务唯一标识(如学员编号、身份ID)重写equals()和hashCode()方法,避免靠对象内存地址误判重复条目。
  • 优化后的添加逻辑代码:
public boolean addKid(Kid k) {
    // 重复校验:遍历现有列表,命中同ID直接拦截
    for (Kid registeredKid : kids) {
        if (registeredKid.getId().equals(k.getId())) {
            System.out.println("操作提示:检测到ID为" + k.getId() + "的重复学员条目,已忽略该重复输入");
            return false;
        }
    }
    // 容量校验:超出班组上限直接拦截
    if (kids.size() >= MAX_LIMIT) {
        System.out.println("操作提示:班组人数已达" + MAX_LIMIT + "的上限,无法添加新学员");
        return false;
    }
    kids.add(k);
    return true;
}

2. 拦截破坏对象合法状态的违规操作

  • 堵上现有代码的状态泄漏漏洞:原代码中getKids()直接返回内部ArrayList的原始引用,外部代码可以完全绕过类内部的容量校验、重复校验规则随意增删学员,从根源上破坏Group对象的合法状态。需要修改该方法为返回内部集合的只读副本,禁止外部直接篡改内部列表。
  • 全链路状态校验:对addKid、removeKid等所有会修改内部状态的方法,在执行实际修改前做合法性判断,校验不通过时直接输出明确的错误提示,说明违规原因,不让对象静默进入非法状态。
  • 优化后的相关代码:
import java.util.Collections;
import java.util.List;

// 优化后的只读getKids方法
public List<Kid> getKids() {
    // 返回不可修改的集合视图,外部无法绕过类校验逻辑篡改列表
    return Collections.unmodifiableList(kids);
}

// 优化后的removeKid方法
public boolean removeKid(Kid k) {
    // 前置校验:待删除学员不存在时直接拦截提示
    if (!kids.contains(k)) {
        System.out.println("操作提示:当前班组不存在ID为" + k.getId() + "的学员,删除操作未生效");
        return false;
    }
    return kids.remove(k);
}
  • 补充注意点:不要为trainer、sportName等内部字段暴露无校验的公开setter,若需修改这些字段,要在setter里加非空校验,避免传入null值导致对象状态异常。

内容的提问来源于stack exchange,提问作者Isy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 19:06:10