java - 重构: Removing flags

标签 java refactoring

我有一个 Java 类,例如:

public class className{
    public static void methodName(Object atr1, Object atr2, Object atr3, boolean flag){
        //Code here ...

        if(flag){
            executeASingleInstruction();
        }

        //Code here ...
    }
}

我知道使用标志参数是一种不好的味道,我想知道是否可以重构此方法以删除标志参数,或者是否最好保持此方法现在的方式。

最佳答案

请注意,代码中还有更多需要考虑重构的内容,但这里我将只关注 boolean 参数气味。

您可以通过拆分方法并决定在调用位置使用哪一个新方法来重构它。

这将使您在调用任一方法时的意图更加清晰,特别是如果它们具有漂亮的描述性名称。

如果我没记错的话,Robert C. Martin 的书中有一个关于它的章节:Clean Code: A Handbook of Agile Software Craftsmanship

public class className{
    public static void methodName1(Object atr1, Object atr2, Object atr3){
        encapsulation1(atr1, atr2, atr3);
        executeASingleInstruction();
        encapsulation2(atr1, atr2, atr3);
    }


    public static void methodName2(Object atr1, Object atr2, Object atr3){
        encapsulation1(atr1, atr2, atr3);
        // no execution of aforementioned instruction
        encapsulation2(atr1, atr2, atr3);
    }
}

关于java - 重构: Removing flags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27943988/

相关文章:

当类具有默认访问权限时,Java 成员访问权限

c++ - 是否有重构 C++ 以符合编码标准的工具?

php - 在 php 中编写代码的更简单方法“if ( $x == $a[1] || $x == $a[2] || $x == $a[3] ....)

python - 在长 if-elseif-else 语句中使用 return (Python)

c# - 如何级联可选参数?

java - 使用Castor根据属性值解析xml

java - 在java中从套接字获取输入和输出流的问题

java - JTree选择颜色

java - 在Java中使用Matcher时出现无限循环

java - 无论如何,是否可以对 Java 中的同一行代码进行多次调用?