草稿本子 2023-11-16 14:45 采纳率: 0%
浏览 1

java 如何在同一个函数中处理不同类型的传入参数


private List percentageTotalTo1(List<SourceResultJO> resultJOList) {
        double max = 0.0;
        double percentageTotal = 0.0;
        int index = 0;
        for (int i = 0; i < resultJOList.size(); i++){
            SourceResultJO resultItem = resultJOList.get(i);
            if (resultItem.getPercentage() > max){
                max = resultItem.getPercentage();
                index = i;
                percentageTotal += resultItem.getPercentage();
            }
        }
        // myNotes: 修正百分比之和不等于1的问题
        max = percentageTotal > 1 ? max - (percentageTotal - 1): max + (1 - percentageTotal);
        resultJOList.get(index).setPercentage(max);
        return resultJOList;
    }

以上代码试图对resultJOList进行处理,resultJOList中的每个元素都有一个percentage属性和对应的getPercentage方法,原则上来说,一个resultJOList中所有元素的percentage之和应该等于1,但在四舍五入后,可能会出现percentage之和不等于1的情况,这段代码就是用于处理这个情况。

现在有多个元素类型不同的resultJOList待处理,也就是说传入的resultJOList参数可以是 List《SourceResultJO》,也可以是 List《AResultJO》,还可以是 List《BResultJO》、 List《CResultJO》,且SourceResultJO、AResultJO、BResultJO、CResultJO类中都有percentage属性和getPercentage方法,请问这种情况应该如何进行代码抽取和复用?

  • 写回答

2条回答 默认 最新

  • 玥轩_521 2023-11-16 14:52
    关注

    为了处理不同类型的传入参数,我们可以使用泛型和接口。首先,创建一个接口,包含一个getPercentage方法:

    public interface PercentageProvider {
        double getPercentage();
    }
    

    然后,让SourceResultJO、AResultJO、BResultJO、CResultJO类实现这个接口:

    public class SourceResultJO implements PercentageProvider {
        private double percentage;
    
        // 其他属性和方法
    
        @Override
        public double getPercentage() {
            return percentage;
        }
    }
    
    public class AResultJO implements PercentageProvider {
        private double percentage;
    
        // 其他属性和方法
    
        @Override
        public double getPercentage() {
            return percentage;
        }
    }
    
    public class BResultJO implements PercentageProvider {
        private double percentage;
    
        // 其他属性和方法
    
        @Override
        public double getPercentage() {
            return percentage;
        }
    }
    
    public class CResultJO implements PercentageProvider {
        private double percentage;
    
        // 其他属性和方法
    
        @Override
        public double getPercentage() {
            return percentage;
        }
    }
    

    接下来,修改percentageTotalTo1方法,使其接受一个PercentageProvider类型的List参数:

    private List<PercentageProvider> percentageTotalTo1(List<PercentageProvider> resultJOList) {
        double max = 0.0;
        double percentageTotal = 0.0;
        int index = 0;
        for (int i = 0; i < resultJOList.size(); i++){
            PercentageProvider resultItem = resultJOList.get(i);
            if (resultItem.getPercentage() > max){
                max = resultItem.getPercentage();
                index = i;
                percentageTotal += resultItem.getPercentage();
            }
        }
        // myNotes: 修正百分比之和不等于1的问题
        max = percentageTotal > 1 ? max - (percentageTotal - 1): max + (1 - percentageTotal);
        resultJOList.get(index).setPercentage(max);
        return resultJOList;
    }
    

    现在,你可以使用任何实现了PercentageProvider接口的类的实例作为参数调用percentageTotalTo1方法。这样,你就可以处理不同类型的传入参数了。

    评论

报告相同问题?

问题事件

  • 修改了问题 11月16日
  • 修改了问题 11月16日
  • 创建了问题 11月16日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集