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

如何为含orden属性的不同类型对象创建通用代码

问题描述

我有一个实体,其包含多个不同类的对象列表作为子元素,这些对象虽类不同,但都拥有orden属性。我在多处编写了重复代码,例如需要按该属性对列表排序时,因类型不同无法简化。

实体结构如下:

contenido={
  "educaciones":[
    {
      ...
      "orden":0
    },{
      ...
      "orden":1
    }
  ],
  "experiencias":[
    {
      ...
      "orden":0
    },{
      ...
      "orden":1
    }
  ]
},
...

当前重复代码示例:

if(tipo.equals("experiencias")){
   List<Experiencia> iterable=contenido.getExperiencias();
   for(int i = 0; i < iterable.size(); i++){
      iterable.get(i).setOrden( orden.get(i) ); //orden = [0,3,5,...]
   }
   iterable.sort((it1,it2)-> it1.getOrden().compareTo(it2.getOrden()));
}else if(tipo.equals("educaciones")){
   List<Educacion> iterable=contenido.getEducaciones();
   for(int i = 0; i < iterable.size(); i++){
      iterable.get(i).setOrden( orden.get(i) );
   }
   iterable.sort((it1,it2)-> it1.getOrden().compareTo(it2.getOrden()));
}else if...

请问是否有办法创建支持不同对象的更通用代码?

解决方案

可以通过面向接口编程彻底消除重复代码,具体步骤如下:

1. 定义统一接口

创建包含orden属性操作方法的接口,让所有拥有该属性的类实现此接口:

public interface Ordenable {
    Integer getOrden();
    void setOrden(Integer orden);
}

让Experiencia、Educacion等类实现该接口:

public class Experiencia implements Ordenable {
    private Integer orden;

    @Override
    public Integer getOrden() {
        return orden;
    }

    @Override
    public void setOrden(Integer orden) {
        this.orden = orden;
    }
    // 类原有其他属性和方法
}

public class Educacion implements Ordenable {
    private Integer orden;

    @Override
    public Integer getOrden() {
        return orden;
    }

    @Override
    public void setOrden(Integer orden) {
        this.orden = orden;
    }
    // 类原有其他属性和方法
}

2. 编写通用处理方法

将重复的赋值、排序逻辑抽成通用方法,参数使用接口类型:

private void processOrdenableList(List<? extends Ordenable> list, List<Integer> ordenList) {
    // 批量设置orden值
    for (int i = 0; i < list.size(); i++) {
        list.get(i).setOrden(ordenList.get(i));
    }
    // 按orden属性排序
    list.sort(Comparator.comparing(Ordenable::getOrden));
}

3. 简化类型判断逻辑

用映射表替代冗长的if-else,快速根据类型获取对应列表:

// 初始化类型与列表的映射关系
Map<String, List<? extends Ordenable>> tipoToListMap = new HashMap<>();
tipoToListMap.put("experiencias", contenido.getExperiencias());
tipoToListMap.put("educaciones", contenido.getEducaciones());
// 后续新增类型直接在此添加映射即可

// 调用通用方法处理
List<? extends Ordenable> targetList = tipoToListMap.get(tipo);
if (targetList != null) {
    processOrdenableList(targetList, orden);
}

后续新增拥有orden属性的类时,只需让类实现Ordenable接口,并在映射表中添加对应关系,无需修改核心处理逻辑,彻底解决代码重复问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:15:57