java - 在 servlet 中使用断言

标签 java assert

我有以下问题:在 servlet 中,我需要处理来自已实现的供应商的不同输入(在以下列表中)(仅知道接口(interface))。这种处理只有在列表具有相同大小的情况下才有意义(几乎肯定是这种情况,除非供应商功能搞砸了),因此我想在大小上使用 assert (否则它将抛出和索引越界异常或类似的东西,这对于后来的开发人员来说很难调试)。这里的问题是,我的程序将在没有 -ea 参数的服务器上运行。我的问题是:是否仍然可以以正确的方式断言:

try{
    List listA = supplier.getListA();
    List listB = supplier.getListB();
    assert listA.size()==listB.size();

    List listC = supplier.getListC();
    assert listA.size()==listC.size();
}
catch(AssertionError error){
   //error handling
}

还是我被扔回异常:

try{
    List listA = supplier.getListA();
    List listB = supplier.getListB();
    if(listA.size()!=listB.size())
        throw new RuntimeException();

    List listC = supplier.getListC();
    if(listA.size()!=listC.size())
        throw new RuntimeException();
}
catch(RuntimeException exception){
   //error handling
}

为了提高可读性,强烈推荐前一种方式,但在服务器上肯定行不通。

最佳答案

有些语言的设计不同,但在 Java 中,使用异常进行流量控制是搬起石头砸自己脚的绝妙方法。

为什么不直接创建一个 if 语句并检查条件?

List listA = supplier.getListA();
List listB = supplier.getListB();
List listC = supplier.getListC();
if(listA.size()==listB.size() && listA.size()==listC.size()) {
    //happy path :)
} else {
    //sad path :(
}

关于java - 在 servlet 中使用断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36014335/

相关文章:

java - 语音转文本时如何只返回一个结果?

java - Maven Cargo Tomcat 7 server.xml 被覆盖

c++ - regsvr32.exe 使用 hInstance 抛出 ASSERT_ERROR

java - 找到范围的交集和重叠并存储结果范围集的最佳算法

java - 创建 Java 充电电池测试器

python - python unittest在setUp方法中报错的正确方法是什么?

cuda - 是否可以从 CUDA 内核中获取断言信息?

node.js - Node js assert.equal多个值

java - JSP 中的枚举

testing - 我如何断言接受 JUnit 中的多个可能值之一