【问题标题】:Is it bad practice to doStuff and return a boolean?doStuff 并返回布尔值是不好的做法吗?
【发布时间】:2015-10-29 18:58:29
【问题描述】:

在我现在正在学习的java课程中,如果键还没有值,我需要为键添加一个值,此外,如果键有值,他们还希望该方法返回true当键已经有值时被添加或为假。

HashMap<RegistrationPlate, String> register = new HashMap<RegistrationPlate, String>();
public boolean add(RegistrationPlate plate, String owner) {

    if (register.get(plate) == null) {
        register.put(plate, owner);
        return true;
    }
    return false;
}

我认为有一个返回真值的“add”方法很奇怪,这应该是一个 void 方法吗?

【问题讨论】:

  • 一点也不奇怪!这是确保您的方法成功运行的常见做法。这样,您可以执行result = add(x,x) 之类的操作,并在继续之前检查result。如果您假设它可以工作,那么以后可能会破坏更多代码。
  • 我认为以任何方式使用void 都是非常糟糕的习惯。 void 没有任何意义,它没有贡献。退货很好,因为它免费提供信息。当您尝试返回void 时,请考虑一下您可以在返回值中提供什么样的信息。
  • 完全没问题。例如 java createFile() 如果成功创建则返回 true 否则返回 false
  • @HuStmpHrrr 使用void 也不错,在很多情况下你会使用void...
  • @brso05 好吧,您不必在所有情况下都返回某些东西。但大多数时候,您确实可以返回一些有用的东西。在这种情况下,是的。另一个常见的例子是 setter 方法。为什么二传手应该返回void?例如,它应该返回实例本身,以便允许 instance.setF1(f1).setF2(f2).setF3(f3) 并且更简洁。还有很多其他的例子。

标签: java null hashmap boolean return


【解决方案1】:

我认为有一个返回真值的 'add' 方法很奇怪,这应该是一个 void 方法吗?

绝对很奇怪。不要将boolean 方法视为提出问题并返回是或否答案的一种方式。他们可以做得更多!

查看 Java 源代码,您会发现某些方法具有 boolean 返回类型是多么美妙。 想向对象添加一些东西吗?成功了吗?在多种情况下,boolean 返回类型对于类/对象/方法之间的通信是有利的。

查看 Java 的 ArrayList remove(Object) implementation 以获取提供额外信息的 boolean 返回类型的绝佳示例。

【讨论】:

    【解决方案2】:

    为加法之类的事情返回一个布尔值可能非常有用。事实上put 返回旧值,因为它有它的用途。

    所以你不需要使用get - 或者更好的containsKey 但可以这样做:

    public boolean add(RegistrationPlate plate, String owner) {
        String oldValue = register.put(plate, owner);
        return oldValue == null || !owner.equals(oldValue);
    }
    

    || ... 有点过头了。

    【讨论】:

      【解决方案3】:

      在 Java 的 util 类中,这些方法被广泛使用。

      看看几乎每个人都知道的类 ArrayList:

      在这个类中有一个方法叫做boolean add(T e), Java 中还有许多其他类也是这样工作的。

      在我看来,这没问题,它使测试更容易。 (可以通过返回值检查方法是否成功)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-07
        • 2023-04-02
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 2010-11-23
        • 1970-01-01
        相关资源
        最近更新 更多