在这种情况下使用重载是错误的吗?

Is overloading wrong to use in this case?

我有一种列出 ArrayList 元素的方法,通常它会打印全局变量 ArrayList 的组件,但在一个特定实例中,我需要它来打印局部变量的组件。

所以我有这个

public static void listPlayers(ArrayList<Player> characters, boolean beingRolled) {
    //print character components (beingRolled specifies which parts of each players to print
}

我在使用局部变量 ArrayList 时使用它, 当我想使用全局时,我称这个版本为

public static void listPlayers(boolean beingRolled) {
    listPlayers(players, abitraryBoolean);
}

其中玩家是全局变量

我正在考虑的另一件事是我想在任何地方使用全局我可以为字符传递一个空引用并编写这个方法

public static void listPlayers(ArrayList<Player> characters, boolean beingRolled) {
    if (characters == null) characters = players;
    //print components
}

哪个版本比较professional/recommended?

第一个版本更好,因为其他人更容易理解。当一个函数的参数都被列出时,调用者可以更容易地预测函数将做什么。如果该函数依赖于不可见的变量,比如如果它在没有源代码的库中可用,调用者将无法理解为什么该函数以意想不到的方式运行。如果没有良好的文档,这是不可能理解的。

一般来说,远离null;重载方法签名是更好的方法。

就是说,您说的一件事很可怕 -- 您有一个对全局变量进行操作的静态方法。一般来说,这是个坏主意。您应该考虑重构以使用 Object/class 作用域状态,而不是全局的静态作用域状态。

我什至会说你应该只使用以 ArrayList 作为参数的重载,并且每次都将全局变量传递给它。然后,即使你必须使用全局变量,至少你在少一个地方使用它。

编辑:我大学时的一位教授写了一本关于重构的书,这本书可读性很强,内容很多(尽管排版有点奇怪)。它被 Steve Halladay 称为 Principle-Based Refactoring: Learning Software Design Principles by Applying Refactoring Rules。我强烈建议阅读上半部分(下半部分本质上是参考)。