Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 让布尔设置器查看它们是否成功执行是一种不好的做法吗?_Java - Fatal编程技术网

Java 让布尔设置器查看它们是否成功执行是一种不好的做法吗?

Java 让布尔设置器查看它们是否成功执行是一种不好的做法吗?,java,Java,把我的二传手写成布尔人来检查他们是否被正确设置是一种不好的做法吗 例如,下面的代码将设置我的帧是否始终位于顶部,如果成功设置为我决定的帧,则返回true。这样做是不好的做法,还是我应该让它没有返回类型 public boolean setAlwaysOnTop(boolean alwaysOnTop) { frame.setAlwaysOnTop(alwaysOnTop); return frame.isAlwaysOnTop() == alwaysOnT

把我的二传手写成布尔人来检查他们是否被正确设置是一种不好的做法吗

例如,下面的代码将设置我的帧是否始终位于顶部,如果成功设置为我决定的帧,则返回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 

您应该尝试编写所需的代码,而不是额外的代码(这不利于维护)

为什么需要选中frame.isAlwaysOnTop()==alwaysOnTop当您执行
frame.setAlwaysOnTop(alwaysOnTop)时
code将很明显地设置它,以确保您已经编写了正确的代码,您应该编写junits,但是您的代码不应该包含任何您在生产中不需要的内容,而只是为了消除您的疑虑


因此,回答您的问题是的,这是一个不好的做法,添加额外的条件来检查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
}

您是否有任何理由相信或意识到
setAlwaysOnTop
会失败的任何情况?我不知道它会失败的任何原因,但这只是一个例子。这只是一个额外的检查,看看它是否成功,以确保没有错误。如果setter失败,您总是可以抛出异常-因为输入无效或其他原因。在这种情况下,您可以使用
断言
而不是返回值。如果传递false,frame.isAlwaysOnTop==false,则它将返回true,这就是预期的行为<代码>如果工具箱支持“始终在顶部”模式,则为true;如果此窗口不支持“始终在顶部”模式,或工具箱不支持“始终在顶部”窗口,则为false。感谢您给出清晰易懂的答案。
try {
    setAlwaysOnTop(true);
} catch (Exception e) {
    log.warn("Could not update always on top", e);
    // do some stuff
}