我有以下问题:在 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/