Java中是否有EXIT_SUCCESS和EXIT_FAILURE的替代品?

21
在C程序中,通常我会在exit()函数中使用EXIT_SUCCESSEXIT_FAILURE来提高程序的清晰度和易读性。

但是在System.exit()中,我不能使用这些宏定义。

我可以定义自己的接口,例如:

public interface ReturnValues {
  public int EXIT_SUCCESS = 0;
  public int EXIT_FAILURE = 1;
}

除了我自己的实现,Java中是否还有其他使用这些宏的方式?(比如使用预定义的库类变量或实现预定义的接口等)


2
@McDowell 是的,确实如此。参考:http://www.gnu.org/s/hello/manual/libc/Exit-Status.html。感谢您的评论。我进行了更正。但是在C语言中的任何函数的一般理论中,错误将返回-1。我是对的吗?需要解释。 - Muthu Ganapathy Nathan
1
退出代码范围取决于系统,但我相信POSIX系统将值限制在0-255之间。 - McDowell
@EAGER_STUDENT 在二进制补码中,-1映射为全1的二进制数。或者,在十六进制中,全部为F。虽然将其用作错误退出值可能不是标准做法,但0000和FFFF之间的差异肯定比0000和0001之间的差异更容易看到。当然,任何理智的处理器在区分它们时需要相同的时间,但对于人类来说,这很好。 - Parthian Shot
3个回答

8

Java中没有预定义的常量来表示成功和失败。这是因为每个特定的应用程序可能会有多种不同类型的失败。


3
澄清一下,无论使用哪种操作系统和编程语言,都可能出现不同类型的故障和故障代码。EXIT_SUCCESS被定义为成功运行,所有其他代码都是失败。EXIT_FAILURE是一个通用的故障代码,如果您不想具体说明,则可以使用它。EXIT_SUCCESS的定义取决于系统。在Posix中,它是0。Windows将其定义为1。 http://www.gnu.org/software/libc/manual/html_node/Exit-Status.html - Robert
4
因为你犯了多个错误,所以被踩了。EXIT_SUCCESS和 EXIT_FAILURE 的存在是为了让你能够使用这些常量,以便不需要具体的数字来表示成功和失败,但同时又不知道主机系统中哪些数字代表成功和失败。通常情况下,0代表成功,非零值代表失败,但这并不是普遍适用的,因此C标准库提供了这些常量。顺带一提,在Linux中,你可以使用sysxits.h作为指南来获取具体的错误代码。退出代码因系统和应用程序而异,这也是Java没有提供标准化接口的奇怪之处。 - Parthian Shot

6
在Java中没有宏。System.exit(0)System.exit(-1)非常易读,不需要过度复杂化。

2

在Java中,使用枚举处理这种情况:

public enum ReturnValue {
    SUCCESS(0),
    FAILURE(-1);

    private int returnCode;

    private ReturnValue(int returnCode) {
        this.returnCode = returnCode;
    }

    public int getReturnCode() {
        return returnCode;
    }
}

使用方法:

System.exit(ReturnCode.FAILURE.getReturnCode());

10
他问道:“除了我的实现之外”,这是自己的实现。我相信他在询问Java是否具有这些内置常量枚举。 - Yanick Rochon
1
它相对于普通的 int 常量有什么优势? - JB Nizet
@JB:如果你在应用程序的其他地方需要它,那么类型检查是必要的。 - Vivien Barousse
当然可以,但除非这是真的,否则我只会使用普通的int常量。 - JB Nizet
3
仅仅因为Java有“枚举”类型并不意味着你应该总是使用它们。在这种情况下,你最终需要编写额外的代码来定义“枚举”,以及额外的代码来使用它。在我看来,并没有什么改进。 - Stephen C
2
至少在Linux上,FAILURE是1而不是-1。但这就是ISO-C提供EXIT_FAILURE的全部意义 - 没有一个单一的常量应该在所有平台上使用。很遗憾JAVA没有提供。 - Guenther Brunthaler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接