【问题标题】:Refactoring Overloaded simple Methods in Java在 Java 中重构重载的简单方法
【发布时间】:2021-03-29 06:16:30
【问题描述】:

我对 Java 还是很陌生。我尝试过寻找答案,但似乎找不到一个我能完全理解的答案。

所以,我知道重载方法是什么——但我将如何重构它以使其看起来不那么臭?

假设我有一个看起来像这样的重载方法

public static int subtract(int a, int b) {return a-b}
public static int subtract(int a, int b, int c) {return a-b-c}
public static int subtract(int a, int b, int c, int d) {return a-b-c-d}

等等。

什么是重构它的一种方法的例子?请详细说明,因为我真的很想了解它是如何工作的。

谢谢

【问题讨论】:

  • 我不明白为什么你的方法需要重构......

标签: java methods overloading


【解决方案1】:

最好使用varargs,它可以处理任意数量的参数(最少2个)

public static int subtract(int a, int... others) {
    return a - Arrays.stream(others).sum();
}


subtract(1, 2)             // -1
subtract(1, 2, 3, 4, 5, 6) // -19

【讨论】:

    【解决方案2】:

    由于模式似乎是从每个输入中减去所有后续输入,我可能建议您重构为接受数组的单个方法:

    public static int subtract(int[] inputs) {
        if (Objects.isNull(inputs) || inputs.length == 0) {
            throw new IllegalArgumentException("null input, returning");
        }
    
        int result = inputs[0];
        for (int i=1; i < inputs.length; ++i) {
            result -= inputs[i];
        }
    
        return result;
    }
    

    【讨论】:

    • 您可能需要length == 0 检查
    • @Lino 答案已更新,尽管我实际上可能更喜欢使用 Apache 库来进行单个方法调用,检查不为空且不为空。
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多