doStuff 并返回布尔值是不好的做法吗?
Posted
技术标签:
【中文标题】doStuff 并返回布尔值是不好的做法吗?【英文标题】:Is it bad practice to doStuff and return a boolean? 【发布时间】: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)
并且更简洁。还有很多其他的例子。
【参考方案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 中还有许多其他类也是这样工作的。
在我看来,这没问题,它使测试更容易。 (可以通过返回值检查方法是否成功)
【讨论】:
以上是关于doStuff 并返回布尔值是不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章
训练7鸡是不是鸟?(instanceof表达式返回值是布尔值,可用于if条件判断)