断言是否总是包含在Android二进制文件中,还是我需要指定-ea
参数?
我可以部署应用程序的最终版本禁用断言,还是依赖于系统?
答案 0 :(得分:1)
Java断言可以在运行时启用/禁用,因此语句必须包含在已编译的代码中,除非它们被明确删除(当然,它们不能在运行)。
documentation表示没有直接支持在编译时实际删除语句,尽管它提到了一个可以使用的技巧,这基本上是一个全局的“调试模式切换”:
// causes the compiler to eliminate the statements
static final boolean asserts = false;
if (asserts) {
assert <expr>;
}
我个人认为在这种情况下你也可以抛出实际的异常,因为它会产生相同的开销,因为适当的异常处理(特别是与单元测试覆盖相结合)可以用于开发和生产阶段/ code并且不要求你做额外的工作。
在任何情况下,请确保您只使用assert
关键字,因为它很容易被误用。上面链接的文档文章很好地描述了正确的用法。