在这种情况下,重载是否错误?

时间:2015-02-25 04:47:05

标签: java arraylist overloading

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

所以我有这个

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

我在使用局部变量ArrayList时使用它, 当我想使用全局i时,我称之为

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
}

哪个更专业/推荐?

2 个答案:

答案 0 :(得分:0)

第一个版本更好,因为其他人更容易理解。当列出函数的参数时,调用者可以更容易地预测函数将执行的操作。如果函数依赖于不可见的变量,例如,如果在没有源的库中这是可用的,则调用者将无法理解函数以意外方式起作用的原因。没有好的文档,这是不可能理解的。

答案 1 :(得分:0)

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

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

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

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