我的团队不主张

My team does not assert

在主要工作 Python 和 C/C++ 几年后,我回到了 Java。我经常在其他结构中使用 asserts。今天我很难让自己不使用断言。

$ java -help 2>&1 | grep -2 "\-ea"
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions with specified granularity

我的团队在任何情况下都不使用 -ea,所以我使用的结构如下:

assert COND;
if (! COND) {
    throw new AssertionError("COND was not true");
}

我要放的地方 assert COND;.

经常点赞:

assert variable != null;
if (variable == null) {
    throw new AssertionError("variable was null");
}

我要放的地方 assert variable != null;.

您对此有何评论或如何改进?

断言可以被禁用,因此不能保证在任何时候都处于活动状态。这可能是很少有人使用它们的原因。

如今,单元测试已取代断言,因为它们会运行代码以查看其行为是否符合预期。此外,@Nullable 等注释有助于 IDE 在不允许的地方捕获潜在的空指针。

我建议您询问您的团队他们希望如何完成此类检查。 Google Guava 和 Java 8 对此有有用的辅助方法。

My team does not use -ea under no circumstances

好吧,那改变那个?不应该 difficult/hurt 将其添加到测试服务器。

assert COND;
if (! COND) {
    throw new AssertionError("COND was not true");
}

那些东西不一样。一个可以关,一个不可以。

始终强制验证可用于清理不受信任的输入。

另一方面,断言只能用于防止程序员出错。