使用布尔设置器来查看它们是否成功执行是不好的做法?

时间:2014-05-31 14:07:18

标签: java

将我的二传手作为布尔值来检查它们是否设置正确是不好的做法?

例如,以下代码将设置我的框架是否始终位于顶部,如果成功设置为我决定的,则返回true。这样做是不好的做法,还是我应该让它没有返回类型?

    public boolean setAlwaysOnTop(boolean alwaysOnTop) {
        frame.setAlwaysOnTop(alwaysOnTop);
        return frame.isAlwaysOnTop() == alwaysOnTop;
    }

请记住,在这个例子中,当我想要在不尝试设置时检查值时,我也有一个getter:

    public boolean isAlwaysOnTop() {
    return frame.isAlwaysOnTop();
}

提前致谢。如果您想了解更多信息,请随时提出,我会提供。

编辑:

只是我想知道它是否有用,因为我可以做一个

if(setAlwaysOnTop(true)) 
do this 

而不是像这样使用虚空:

  setAlwaysOnTop(true);
  do this 

2 个答案:

答案 0 :(得分:1)

您应该尝试编写所需的代码而不是额外的代码(这对维护有害)

public boolean setAlwaysOnTop(boolean alwaysOnTop) {
    frame.setAlwaysOnTop(alwaysOnTop);
    return frame.isAlwaysOnTop() == alwaysOnTop;
}

为什么你需要检查frame.isAlwaysOnTop() == alwaysOnTop;当你做frame.setAlwaysOnTop(alwaysOnTop);代码时会明显地设置它为了确保你已经编写了正确的代码你应该编写junits但是你的代码不应该有你的任何东西不需要生产,只是为了清除你的怀疑。

所以回答你的问题是糟糕 pracltice

答案 1 :(得分:1)

通常,添加其他条件来检查API工作不是一个好主意 frame.setAlwaysOnTop 必须完成其工作。如果您不信任API,请使用单元测试。只有当测试失败时,您才应该考虑解决方案 - 找到软件的工作版本,报告错误或修复问题,如果您有权访问代码库。

只有当您了解某些现有问题并且现在无法解决时,这种额外检查才有意义。在这种情况下,我会从 setAlwaysOnTop 方法引发自定义异常(因为您知道这是一种例外情况),记录错误并执行您的健全操作。

public void setAlwaysOnTop(boolean alwaysOnTop) throws UIModificationExcepion {
    frame.setAlwaysOnTop(alwaysOnTop);
    // due to existing bug ... is not updated for all cases
    if (frame.isAlwaysOnTop() != alwaysOnTop) {
        throw new UIModificationException("Unable to change 'always on top' property");
    }
}

客户端代码

try {
    setAlwaysOnTop(true);
} catch (Exception e) {
    log.warn("Could not update always on top", e);
    // do some stuff
}